2014-08-29 3 views
0

Я очень новичок в Symfony. Я начал свой первый проект в Symfony 2.3 LTS. В это время я создал множество контроллеров в разных пакетах. Мой вопрос связан с правильной процедурой. Я использую в своих диспетчерах разные службы, такие как «переводчик», «фабрика форм», «сеанс», «роутер», «сущ.», «Шаблон».Отступ впрыска на базе Контроллер/Сервис

Я создаю в моем «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 ($ шаблонный) { $ this-> шаблонный = $ шаблонный; }

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 

Более документы о родительских услугах и преобладающем материнском dependecies: http://symfony.com/doc/current/components/dependency_injection/parentservices.html

Смежные вопросы