2014-08-29 103 views
0

我在Symfony非常新。我在symfony 2.3 LTS中开始了我的第一个项目。在这个时候,我创建了许多不同的控制器。我的问题涉及到一个正确的程序。我在我的控制器中使用了不同的服务,如'翻译器','表格工厂','会话','路由器','实体管理器','模板化'。基地控制器/服务Depedendency注入

我在“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; 
} 

公共函数setTemplating($模板) { $这 - >模板= $模板; }

public function getTemplating() 
{ 
    return $this->templating; 
} 

public function setSession($session) 
{ 
    $this->session = $session; 
} 

public function getSession() 
{ 
    return $this->session; 
} 

public function setTranslator($translator) 
{ 
    $this->translator = $translator; 
} 

public function getTranslator() 
{ 
    return $this->translator; 
} 

public function setRouter($router) 
{ 
    $this->router = $router; 
} 

public function getRouter() 
{ 
    return $this->router; 
} 

public function setFormFactory($formFactory) 
{ 
    $this->formFactory = $formFactory; 
} 

public function getFormFactory() 
{ 
    return $this->formFactory; 
} 
} 

我和我的语言环境控制器这个样子的

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)); 
} 

称这是一个正确的步骤?我应该在需要此服务的ervery控制器中使用此过程吗?

我希望我可以得到有益的启示,非常感谢

回答

0

这是一个控制器注入到另一种不正确的方法。你应该使用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 

更多文档关于父母的服务和压倒一切的父母依赖条件:http://symfony.com/doc/current/components/dependency_injection/parentservices.html