2013-12-15 14 views
1

Я хочу получить доступ к моему TestControler в DefaultController. Поэтому я создаю новый экземпляр, но контейнер имеет значение null. Если я хочу, чтобы вызвать метод, Symfony бросает FatalErrorException:Доступ к другому контроллеру

Error: Call to a member function get() on a non-object in

контроллера по умолчанию: результат

/** 
* DefaultController. 
* 
*/ 
class DefaultControllerextends Controller 
{ 

    public function indexAction() 
    { 
     $contrTest = new TestController(); 
     var_dump($contrTest);   
    } 

var_dump:

object(test\testBundle\Controller\TestController)#283 (1) {
["container":protected]=> NULL }

Как я могу это сделать?

ответ

3

Использование других контроллеров внутри контроллера является признаком плохой архитектуры. Обычно это означает, что вам нужно разделить контроллер на service, который вы можете использовать везде, и контроллер.

Например, если у вас есть контроллер, у которого есть parseAction, который анализирует файл, и вам также нужно использовать его на другом контроллере, вы должны создать службу (укажите ее имя) и использовать ее как в обоих контроллеры:

// ... 
class FirstController extends Controller 
{ 
    public function xxxAction() 
    { 
     $parser = $this->get('acme_demo.parser.the_file_type'); 

     $data = $parser->parse(...); 
    } 
} 

// ... 
class SecondController extends Controller 
{ 
    public function yyyAction() 
    { 
     $parser = $this->get('acme_demo.parser.the_file_type'); 

     $data = $parser->parse(...); 
    } 
} 
Смежные вопросы