2013-12-15 124 views
1

我想在DefaultController中訪問我的TestControler。所以我創建了一個新的實例,但容器是空的。如果我要調用一個方法時,symfony拋出一個FatalErrorException:訪問不同的控制器

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

DefaultController:

/** 
* 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它解析文件控制器,你需要使用在另一個控制器也一樣,你必須創建一個acme_demo.parser.the_file_type服務(給它你想要的名稱),並使用在兩個控制器:

// ... 
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(...); 
    } 
} 
相關問題