我有一個表格,我需要在多個頁面上使用:如何處理在多個頁面上使用的表單?
控制器
$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