我的控制器中有2个动作函数,我想将变量传递给其他动作函数
这是我控制器中的第一个功能
public function newUserAction(Request $request)
{ .........
$url = $this->generateUrl('userBundle_new_user_reasonCodeAjaxView',
array('id' => $newUser->getCode(),
'countCode' => $countCode,));
return $this->redirect($url);
这是我控制器中的第二个功能
public function userCodeAjaxViewAction(Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$pc = $em->getRepository('UserBundle:Code')->find($id);
if($pc != null)
{
return $this->render('UserBundle:userCodeView.html.twig', array(
'pc' => $pc,
));
}
我的twif看起来像这样
<div class="">
<div class="panel panel-default step3-textarea top-arrow top-arrow">
<div class="panel-body">
<fieldset>
<div>
{{ pc.name|trans }}
{{countCode}}
</div>
</fieldset>
</div>
</div>
</div>
我收到错误Variable "countCode" does not exist in...
有什么想法我如何使用其他控制器中控制器的变量?
答案 0 :(得分:0)
您正在为两个控制器使用相同的模板范围,但这是不可能的。如果您使用两个控制器来呈现两个简单的信息,为什么不简单地返回JSON并使用AJAX在更全局的模板中显示它?
另外一个纯粹的symfony解决方案是拥有一个主模板view.html.twig
,你可以放在哪里
<div class="">
<div class="panel panel-default step3-textarea top-arrow top-arrow">
<div class="panel-body">
<fieldset>
<div>
{{ render(controller("AppBundle:UserController:newUserAction")) }}
{{ render(controller("AppBundle:UserController:userCodeAjaxViewAction")) }}
</div>
</fieldset>
</div>
</div>
鉴于此,您的两个控制器操作模板将很简单{{ pc.name|trans }}
和{{countCode}}
。
希望它可以帮助你!
答案 1 :(得分:0)
您无法从另一个控制器获取变量 每个请求只创建一个控制器实例。
您可以做的是创建一个可以在控制器中调用的服务 这样的事情:
class CountUserService{
public function count(){
return 1; // count users here
}
}
在控制器中执行此操作:
$service = new CountUserService();
$data=['countCode' => $service->count()];
return $this->render('UserBundle:userCodeView.html.twig', $data);