繁体   English   中英

在TWIG中渲染控制器并显示表单错误

[英]Render controller in TWIG and show form errors

我有indexAction和contactAction

contactAction是一个简单的表单,没有映射字段(FormType),如下所示:

/**
 * @Route("/contact", name="contact")
 * @Template()
 * @param Request $request
 * @return array
 */
public function contactAction(Request $request)
{
    $form = $this->createForm(new ContactType());

    $form->handleRequest($request);

    if ($form->isValid()) {
        $firstName = $form->get('first_name')->getData();
        $lastName = $form->get('last_name')->getData();
        $email = $form->get('email')->getData();
        $message = $form->get('message')->getData();
    }
    return array(
        'form' => $form->createView()
    );
}

我用这个TWIG命令在我的indexAction中渲染这个表单:

{{ render(controller('RusselBundle:Default:contact')) }}

一切都很好,如果页面没有重新加载,HTML5验证器工作正常,但如果表单有一些错误,如:firstName长度,错误根本不显示,我该怎么办,以便错误出现在indexAction形式? 任何帮助,将不胜感激。 我只是好奇它是可能的,如果 - 如何? 对不起我的英语不好....

您应该从请求堆栈中获取主请求,而不是使用传递给操作的请求。 正如@DebreczeniAndrás所说,当你使用render(controller())你正在使用一个新创建的子请求,而不是在加载时实际传递给页面的请求(主请求)。

public function contactAction(Request $request)
{
    $request = $this->get('request_stack')->getMasterRequest();

    $form = $this->createForm(new ContactType());

    //...
}

在symfony3上使用这样的渲染函数

{{ render(controller('RusselBundle:Default:contact', {'request':app.request})) }}

如果您在树枝中使用render功能,那么会创建一个子请求,因此您的原始发布(即在您的主要请求中)值会丢失。

您可以将主要请求传递给表单呈现操作,如下所示:

{{ render(controller('RusselBundle:Default:contact'), 'request' : app.request ) }}

这会将所有主要请求参数适当地传递给您的子请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM