symfony - 在 Symfony2 中使用 Controller 外部的存储库

标签 symfony controller doctrine

我目前正在使用一个函数来获取我的存储库,如下所示:

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/

相关文章:

java.util.MissingFormatArgumentException : Format specifier '%s'

sql - 我们可以将额外的参数传递给 beego 路由器吗

doctrine-orm - 使用 DQL 仅选择具有给定关联对象计数的实体

php - 如何使用 Symfony2 配置代码接收功能测试?

php - 在 Symfony2 的路由中根据需要设置一个参数而不定义它

php - MVC - URI 中没有 Controller ?

php - Doctrine Regular vs Fetch 加入

javascript - 将修改后的 json 从 View 发送到 Controller

symfony - HTTPS 和 SSL 证书

mysql - 查询时间长