访问其他控制器

时间:2013-12-15 19:28:23

标签: php symfony controller

我想在DefaultController中访问我的TestControler。所以我创建了一个新实例,但容器为null。如果我想调用一个方法,symfony会抛出一个FatalErrorException:

  

错误:在

中的非对象上调用成员函数get()

DefaultController:

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

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

var_dump结果:

  

object(test \ testBundle \ Controller \ TestController)#283(1){
  [ “容器”:保护] => NULL}

我该怎么做?

1 个答案:

答案 0 :(得分: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(...);
    }
}