我想在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}
我该怎么做?
答案 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(...);
}
}