我有一个表格,我需要在多个页面上使用:如何处理在多个页面上使用的表单?
控制器
$emailForm = $this->get('form.factory')->createNamedBuilder('form', 'email_form')
->add('email', 'email')
->add('subject', 'text')
->add('body', 'textarea')
->getForm();
$request = $this->get('request');
if ($request->getMethod() == 'POST' && $request->request->has('email_form')) {
$emailForm->bindRequest($request);
if ($emailForm->isValid()) {
// do stuff ...
$this->get('session')->setFlash('email_sent', "Woey, mail sent successfully!");
// Redirect on the same url to prevent double posts
return $this->redirect($this->generateUrl($this->getRequest()->attributes->get('_route')));
}
}
return $this->render('Bundle:Form:index.html.twig', array('email_form' => $emailForm->createView()));
模板
{% if app.session.getFlash('email_sent') %}
<p>{{ app.session.getFlash('email_sent') }}</p>
{% endif %}
<form action="{{ path(app.request.attributes.get('_route')) }}" method="post" {{ form_enctype(email_form) }}>
{{ form_widget(email_form) }}
<p><input type="submit" class="submit" value="Send" /></p>
</form>
这真的只是标准Symfony2的形式,就像从教程。
我无法想象如何在多个页面(在多个控制器操作中)有效地使用它,而不必重复自己(太多)。到目前为止,我尝试过:
- 将逻辑放入基本控制器,这是每个控制器的父级,我想要这种形式。有两个问题这种方法:
- 我想不出如何正确重定向到同一页面
- 我只好打电话给父母,从法的每一个动作,这是不是一个真正的问题,但我猜想必须有一些更优雅的方式
- 渲染控制器使用embedded controllers在树枝。但是,我无法计算出how to redirect properly。
那么,这种形式的常用方法是什么?
编辑:
我正在寻找一个没有脚本的解决方案。
我发现这篇博文很有帮助,当处理类似的问题时:https://phpcoderblog.wordpress.com/2014/06/26/symfony2-using-same-form-for-all-pages-symfony2-put-同外形上所有页Symfony2中使用,同样外形上的每个页面,Symfony2中,如何使用的接触式外形上的每个页面,Symfony2中,如何对使用 - contact-form-on-al/ – Sam