Symfony2 - doctrine:schema:更新失败,实体在bundle之外(解耦)

trr*_*rrm 5 php mapping orm symfony doctrine-orm

我正在读这篇文章:

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

作者提到,该项目可以采用这种方法:

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
Run Code Online (Sandbox Code Playgroud)

所以我按照这篇文章结束了这样的事情:

src/
??? Product/
    ??? Bundle
        ??? SiteBundle/
            ??? Controller/
                ??? IndexController.php
            ??? Resources/
                ??? views/
                    ??? index.html.twig
            ??? ProductSiteBundle.php
    ??? Entity
        ??? User.php
Run Code Online (Sandbox Code Playgroud)

现在Symfony看不到我的User.php作者没有提到我是否必须添加任何额外的代码才能使这个工作,现在我收到这个错误:

MappingException: The class 'Product\Entity\User' was not found in the chain configured namespaces OtherNameSpaces
Run Code Online (Sandbox Code Playgroud)

UPDATE

所以我删除了现有的代码.并做了这样的事情:

src/
??? Product/
    ??? Bundle
        ??? SiteBundle/
            ??? Controller/
                ??? IndexController.php
            ??? Resources/
                ??? views/
                    ??? index.html.twig
            ??? ProductSiteBundle.php
    ??? Entity
        ??? User.php
Run Code Online (Sandbox Code Playgroud)

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();

    }
}
Run Code Online (Sandbox Code Playgroud)

然后

php app/console doctrine:schema:update --force //No Metadata Classes to process.
Run Code Online (Sandbox Code Playgroud)

似乎Symfony根本不知道那个文件夹.有什么地方我可以让symfony查看该文件夹吗?

Nic*_*ich 11

一个好的博客文章由的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
Run Code Online (Sandbox Code Playgroud)

您现在可以像这样访问存储库(因为别名定义):

$entityManager->getRepository('Acme:YourEntity');
Run Code Online (Sandbox Code Playgroud)