Symfony 依赖于基本控制器/服务的注入

Symfony 依赖于基本控制器/服务的注入,symfony,service,controller,dependencies,code-injection,Symfony,Service,Controller,Dependencies,Code Injection,我是新来的。我在symfony 2.3 LTS中开始了我的第一个项目。此时,我已经在不同的包中创建了许多控制器。我的问题与正确的程序有关。我在我的控制器中使用不同的服务,如“translator”、“form factory”、“session”、“router”、“entitymanager”、“templating” 我在“service.yml”中创建了一个基本服务 myapp.controller.base: class: "%myapp.controller.base.clas

我是新来的。我在symfony 2.3 LTS中开始了我的第一个项目。此时,我已经在不同的包中创建了许多控制器。我的问题与正确的程序有关。我在我的控制器中使用不同的服务,如“translator”、“form factory”、“session”、“router”、“entitymanager”、“templating”

我在“service.yml”中创建了一个基本服务

myapp.controller.base:
    class: "%myapp.controller.base.class%"
    arguments: ["@doctrine.orm.entity_manager", , "@templating", "@session", "@translator", "@router", "@form.factory"]
并将基本服务注入我的控制器中,这也是一个服务

myapp.controller.locales:
    class: "%myapp.controller.locales.class%"
    arguments: ["@myapp.controller.base"]
我的基本服务是这样的

namespace MyApp\<BundleName>\Controller;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\HttpFoundation\Session\Session;

class BaseController
{
protected $formErrorService;
protected $entityManager;
protected $templating;
protected $session;
protected $translator;
protected $router;
protected $formFactory;

public function __construct($entityManager, EngineInterface $templating, Session $session, $translator, $router, $formFactory)
{
    $this->setEntityManager($entityManager);
    $this->setTemplating($templating);
    $this->setSession($session);
    $this->setTranslator($translator);
    $this->setRouter($router);
    $this->setFormFactory($formFactory);
}

 public function setEntityManager($em)
{
    $this->entityManager = $em;
}

public function getEntityManager()
{
    return $this->entityManager;
}
我调用我的locales控制器,如下所示

namespace MyApp\<Bundlename>\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;

class LocalesController extends BaseController
{

protected $baseService;

public function __construct($baseService)
{
    $this->baseService = $baseService;
}

public function indexAction(Request $request)
{

$locales=$this->baseService->getEntityManager()->getRepository('<reponame>')->findAll();
    return  $this->baseService->getTemplating()->renderResponse('<templatename>', array('locales' => $locales));
}
名称空间MyApp\\Controller;
使用Symfony\Component\HttpFoundation\Request;
使用Symfony\Component\HttpFoundation\RedirectResponse;
使用Symfony\Component\HttpFoundation\Session\Session;
类LocaleController扩展BaseController
{
受保护的服务;
公共函数构造($baseService)
{
$this->baseService=$baseService;
}
公共函数索引(请求$Request)
{
$locales=$this->baseService->getEntityManager()->getRepository(“”)->findAll();
返回$this->baseService->getTemplateing()->renderResponse('',数组('locales'=>$locales));
}
这是正确的过程吗?我应该在需要此服务的服务器控制器中使用此过程吗


我希望我能得到有用的提示,非常感谢

将一个控制器插入另一个控制器是不正确的。您应该为您的子控制器使用
parent

例如:

myapp.controller.base:
    class: "%myapp.controller.base.class%"
    arguments: ["@doctrine.orm.entity_manager", , "@templating", "@session", "@translator", "@router", "@form.factory"]

myapp.controller.locales:
    class: "%myapp.controller.locales.class%"
    parent: myapp.controller.base
有关父服务和覆盖父依赖项的更多文档:

myapp.controller.base:
    class: "%myapp.controller.base.class%"
    arguments: ["@doctrine.orm.entity_manager", , "@templating", "@session", "@translator", "@router", "@form.factory"]

myapp.controller.locales:
    class: "%myapp.controller.locales.class%"
    parent: myapp.controller.base