2012-08-16 66 views
0

我有一个名为链接包的包。现在我已经把所有的混合东西放在那里,用在所有的包中。如何访问存储库,如果没有该名称的实体Doctrine2 Symfony2

但我没有任何实体称为链接。

我想创建LinkedRepository,这样我就可以拥有我所有的常用功能。但是,我将如何在其他包中获取该存储库。我的意思是如何调用这个

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

回答

1

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

  1. 子类EntityRepository并将其命名为LinkedRepository,在这里你可以添加你的常用方法。所有的定制Repository类都必须继承LinkedRepository类的子类。如果你想在你的所有实体的Repository实例中使用这些通用的功能,但是你不需要一个自定义的Repository类,你可以声明LinkedRepository类为Entity的repositoryClass @ORM\Entity(repositoryClass="Acme\LinkedBundle\Repository\LinkedRepository"),假设你的Bundle里的Repository文件夹中有你的Repository类,并用Acme替换你的公司名称。
  2. 创建一个service并在其中添加您的通用功能。

我想第一个比较容易。

1

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

这是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'); 
} 

希望这个作品获得控制器的服务。

相关问题