我正在读这篇文章:
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
所以我按照这篇文章结束了这样的事情:
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
更新
所以我删除了现有的代码。并做了类似的事情:
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 :(得分:11)
Jakub Zalas的good blog article描述了如何映射生活在捆绑之外的实体。
您需要手动添加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');