Silex:无效提交后用输入的数据填充表单

Silex: populate form with entered data after invalid submit

用户提交(未完成的)表单后,我希望表单显示已输入的数据+错误消息。

使用这段代码,提交表单后为空:

$request = $app['request'];

$form = $app['form.factory']->createBuilder('form')
    ->add('name', 'text', array( 'label' => 'Ihre Name:'))
    ->add('comment', 'text', array('constraints' => new Assert\Length(array('min' => 15))))
    ->getForm();

$twig_context = array('form' => $form->createView());

$form->handleRequest($request);

if ($form->isValid()) {
    $data = $form->getData();
    return 'valid!';
    // Send form...
} else {
    // display the form
    return $app['twig']->render('contact.html.twig', $twig_context);
}

Twig 模板:

{{ form_start(form) }}
{{ form_widget(form) }}
<div>
    <input type="submit" value="Send" />
</div>
{{ form_end(form) }}

您应该最后创建表单视图(可以在呈现模板之前)。在您的情况下,视图是在应用 Request 中的数据之前创建的。

这个:

$twig_context = array('form' => $form->createView());

$form->handleRequest($request);

应该是:

$form->handleRequest($request);

你的渲染方法应该是:

return $app['twig']->render('contact.html.twig', 
    array(
        'form' => $form->createView()
    )
);