2013-10-11 6 views
5

私はこの記事を読んでいた。Symfony2の - 教義:スキーマ:アップデートバンドルの外実体で失敗(デカップリング)

http://danielribeiro.org/yes-you-can-have-low-coupling-in-a-symfony-standard-edition-application/

著者はそれがプロジェクトのためにartitctureのこの種を持つことが可能だと述べました:

src/ 
└── Vendor/ 
    └── Product/ 
     └── Bundle 
      └── BlogBundle/ 
      └── ForumBundle/ 
      └── SiteBundle/ 
       └── Controller/ 
        └── IndexController.php 
       └── Resources/ 
        └── views/ 
         └── index.html.twig 
       └── ProductSiteBundle.php 
     └── Entity 
      └── User.php 
     └── Repository 
      └── UserRepository.php 
     └── Service 
      └── UserPasswordRetrievalService.php 

ので、私は記事に続き、このようなもので終わる:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

に今、symfonyは私のUser.phpを見ることができない私は、この作品にするために余分なコードを追加する必要がある場合、著者は言及しなかった、そして今、私はこのエラーを取得しています:

MappingException: The class 'Product\Entity\User' was not found in the chain configured namespaces OtherNameSpaces 

UPDATE

私は既存のコードを削除しました。そして、このようなものでした:

src/ 
└── Product/ 
    └── Bundle 
     └── SiteBundle/ 
      └── Controller/ 
       └── IndexController.php 
      └── Resources/ 
       └── views/ 
        └── index.html.twig 
      └── ProductSiteBundle.php 
    └── Entity 
     └── User.php 

User.php

namespace Product\Entity; 

/** 
* @ORM\Entity 
* @ORM\Table(name="users") 
*/ 
class User 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 

    } 
} 

をしてから

php app/console doctrine:schema:update --force //No Metadata Classes to process. 

symfonyは全くそのフォルダを認識していないようです。私がsymfonyにそのフォルダを見るように頼むことができる場所はありますか?

+0

User.phpであなたの名前空間は何ですか? – Tib

+0

'名前空間Product \ Entity' @Tib – trrrrrrm

+0

@nifrの回答はその上にあります。あなたが最初にこの習慣について聞いた私の記事では、あなたが内部的にどのようにそれをやっているのか(意図的に)説明していません。 –

答えて

11

good blog article(Jakub Zalas)は、バンドル外に存在するエンティティのマッピング方法について説明しています。

以下に示すように、doctrineがマッピング情報を探す場所を手動で追加する必要があります。

これにより、マッピング情報もdoctrine:schema:updateコマンドで使用できるようになります。設定変更後にキャッシュをクリアすることを忘れないでください。

# app/config/config.php 
doctrine: 
    orm: 
     # ... 
     mappings: 
      Acme: 
       type: annotation 
       is_bundle: false 
       dir: %kernel.root_dir%/../src/Acme/Entity 
       prefix: Acme\Entity 
       alias: Acme 

になりました(理由は別名定義の)このようなリポジトリにアクセスすることができます

$entityManager->getRepository('Acme:YourEntity'); 
+0

完璧に働いて、ありがとう! – trrrrrrm

関連する問題