如果没有该名称的实体Doctrine2 Symfony2,我该如何访问存储库

时间:2012-08-16 00:23:08

标签: php symfony doctrine-orm

我有一个名为Linked Bundle的包。现在我已将所有混合内容放在所有捆绑包中。

但我没有任何名为Linked的实体。

我想创建LinkedRepository,以便我可以在那里拥有我的所有常用功能。但是我将如何在其他捆绑包中获取该存储库。我的意思是如何称呼这个

$repository = $em->getRepository('LinkedBundle:"*What should I write here*"');

2 个答案:

答案 0 :(得分:1)

我认为这是不可能的,因为你打算这样做。但我建议使用服务容器而不是存储库。在此Service Container中,您可以使用不同的存储库,您需要将这些存储库用于这些全局任务。每个控制器等也可以访问服务容器。

以下是Documentatino:http://symfony.com/doc/current/book/service_container.html 我不认为你需要整个注射部件。只需定义服务:

services:
    linked_service:
        class: Acme\LinkedBundleBundle\Service\LinkedService

然后通过

在控制器中获取服务
public function indexAction()
{
    $service = $this->get('linked_service');
}

希望这有效。

答案 1 :(得分:1)

您不能拥有单独的存储库类。存储库类链接到实体,因此您不能拥有“独立”存储库,但我可以看到两个选项:

  1. Subclass EntityRepository并将其命名为LinkedRepository,在这里您可以添加常用方法。您的所有自定义Repository类都必须子类化LinkedRepository类。如果您想在所有Entity的Repository实例中使用该常用功能但不需要自定义Repository类,则可以将LinkedRepository类声明为Entity的repositoryClass @ORM\Entity(repositoryClass="Acme\LinkedBundle\Repository\LinkedRepository"),假设您的Bundle内的Repository文件夹中有Repository类并用您的公司名称替换​​Acme。
  2. 创建service并在其中添加常用功能。
  3. 我想第一个更容易。