我在Symfony 2中做了一些小项目,它们是非常简单的项目,因为我是初学者,他们只有一个包,这个包管理从1到3个表的表单和数据访问。现在有人对这个捆绑包之一感兴趣,他希望我开发一些其他功能,需要更多的捆绑,他们应该使用相同的数据库,模板等。我有很多疑问,但有我需要能够开始的一件事就是把实体和原始包中的一些表格拿出来说:
src
|__MyProject
|___MyBundle
|__Entity
|__Form
我希望将这些实体和一般表格作为MyProject
内的独立文件夹,让我们说:
src
|__MyProject
|__Entity (General entities)
|__Form (general forms)
|___MyBundle
|__Entity
|__Form
我不知道这是否是正确的方法,但我想我需要这样的东西。我一直在阅读一些关于最佳实践的文档,他们做了类似的事情(不完全相同),但每个开发人员都有他自己的书。问题是你如何告诉Symfony实体不再在这里,而且它们在其他地方,我试图改变namespaces
路径和use
语句,但它不起作用只做这件事,Symfony仍然在寻找MyBundle
内的实体。任何人都可以帮助我一些如何或指出我可靠的文档吗?
答案 0 :(得分:1)
如果要调用当前名称空间(vendor / bundle1 / entity)之外的实体,则需要引用。 2解决方案:
namespace vendor\bundle2\Controller;
use vendor\bundle1\Entity\MyEntity;
或
直接在实体名称中设置完整路径
public function indexAction() {
...
$entity = new vendor\bundle1\Entity\MyEntity();
....
}
PS:我不知道它是否相关,但我记得带有Doctrine的实体子目录的问题
答案 1 :(得分:1)
您在问题中写道,新捆绑包将使用相同的数据库,模板等。这意味着这些捆绑包紧密耦合。因此,你应该问自己一个问题:
我是否会单独分发这些捆绑包?
如果您的答案是 No。,那么您应该将这两个捆绑包保存在一个捆绑包中,而不是单独的捆绑包中。如果你的答案是是。,这可能不是这种情况,那么你应该有单独的包。
为了分离你的包,在这种情况下,你应该保持这样:
src
|__MyProject
|___MyBaseBundle
| |__Entity
| |__...
|___MyOtherBundle
|__Form
|__...
在您的基本捆绑包中,您应该保留所有捆绑包中常见的所有项目,包括案例实体,布局和其他资源。在您的其他捆绑包中,您应该保留主要针对该捆绑包的项目。