我目前正在使用一个函数来获取我的存储库,如下所示:
public function getRepositories()
{
// Tasks
$tasks = $this->getDoctrine()
->getRepository('Model:Task');
// Task Info
$taskInfos = $this->getDoctrine()
->getRepository('Model:TaskInfo');
return array(
'tasks' => $tasks,
'taskInfos' => $taskInfos,
);
}
所以在我的 Controller 操作中,我可以像这样调用一些 SQL:
$repositories = $this->getRepositories();
$task = $repositories['tasks']->findOneById($id);
但是现在我有几个 Controller ,我注意到我将相同的 getRepositories() 函数复制到每个 Controller 中,这并不好,因为它会重复复制代码。
我想要的是有一个辅助类,这可能是其中的功能之一。
但是我该怎么做呢,因为辅助类不会是 Controller 并且存在
$this->getDoctrine()
显然行不通?谢谢
最佳答案
您可以使用服务 (http://symfony.com/doc/current/book/service_container.html) 并注入(inject) Doctrine 。
services:
my.helper.class:
class: Acme\MyBundle\Helper\MyHelper
arguments: [ @doctrine.orm.entity_manager ]
<?php
namespace Acme\MyBundle\Helper;
use Doctrine\ORM\EntityManager;
class MyHelper
{
protected $manager;
public function __construct(EntityManager $manager)
{
$this->manager = $manager;
}
public function getRepositories()
{
$tasks = $this->manager->getRepository('Model:Task');
$taskInfos = $this->manager->getRepository('Model:TaskInfo');
return array(tasks, taskInfos);
}
}
话虽如此,在您的情况下,我并不真正理解这样做的目的,因为 Controller 旨在获取数据并返回它。
你不是在重复逻辑。
好像太过分了,实体管理器已经是那样的 helper 了。
关于symfony - 在 Symfony2 中使用 Controller 外部的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23507505/