我在简单的控制器中有简单的操作:
public function _targetAction(RequestStack $requestStack)
{
$request = $requestStack->getMasterRequest();
// ...
}
有两种方法可以称呼它。第一:
// The same or other controller
public function topAction(Request $request)
{
// forward to SimpleController:_target
return $this->forward('AppBundle:Simple:_target');
}
来自树枝(次级请求)的第二个:
// SimpleController
public function topAction(Request $request)
{
// render
return $this->render('AppBundle:Simple:top.html.twig');
}
// top.html.twig
{{ render(controller('AppBundle:Simple:_target')) }}
我如何识别我在这种方法中使用SimpleController :: _ targetAction的方式:
public function _targetAction(RequestStack $requestStack)
{
// what can i do here to uniquely identify current way
// Note: $requestStack->getParentRequest() is not null in both cases
}
答案 0 :(得分:1)
在我看来,如果你需要根据通话类型执行不同的代码,你应该考虑为每个动作创建separate routes
。
如果您真的想要使用相同的,我最好的方法是在路线上添加一个参数来识别请求。
/**
*
* @Route("/target/{from}", name="_target")
*/
public function _targetAction($from)
{
if($from == 'view'){
// execute code for view call
} else {
// execute code for controller call
}
}
然后,当您调用它时,根据调用者类型传递不同的参数:
<强> TWIG 强>
{{ render(controller('AppBundle:Simple:_target', { 'from': 'view' })) }}
<强> CONTROLLER 强>
return $this->forward('_target', array('from' => 'controller'));