我有一个嵌入式控制器,如 Symfony 网站上所述。http://symfony.com/doc/current/templated/embedding_controllers.html http://symfony.com/doc/current/templating/embedding_controllers.html
唯一的区别是我的控制器有一个表单。所有内容均正确呈现,但提交表单后,请求始终为空。由于请求为空,因此 $form->isValid() 和 $form->isSubscribed() 始终返回 false。
请在下面找到我的代码:
Twig:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
控制器:
public function myEmbeddedAction(Request $request)
{
$template ="myTwig.html.twig";
$supportTicket = new SupportTicket();
$form = $this->createForm('AppBundle\Form\SupportTicketType', $supportTicket);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// success
}
return $this->render($template, array(
'supportTicket' => $supportTicket,
'form' => $form->createView()
));
}
将控制器嵌入到我的布局中:
{{ render(controller('AppBundle:Default:myEmbedded')) }}
嵌入操作处的请求始终具有相同的值:
{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}
但是,如果我直接通过 URL 访问嵌入式控制器并填写表单,它就可以工作。如何让表单在我的嵌入式控制器中工作?
只是为了微笑尝试
$request = $this->get('request_stack')->getMasterRequest();
当使用嵌入式控制器时,您实际上会收到一个子请求。我本以为子请求仍然具有主请求属性,但我想不会。
更新:2019-09-16
虽然上面的代码在从 AbstractController 扩展时仍然有效,但使用注入更符合 Symfony 的精神:
public function myEmbeddedAction(RequestStack $requestStack)
{
$request = $requestStack->getMasterRequest();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)