У меня есть форма, которую нужно использовать на нескольких страницах:
Контроллер
$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, почти как в учебнике.
Я не могу понять, как мне эффективно использовать ее на нескольких страницах (в нескольких действиях контроллера), не повторяя себя (слишком много).До сих пор я пытался:
- поместить логику в базовый контроллер, который является родительским для каждого контроллера, где я хочу иметь эту форму.С этим подходом было 2 проблемы:
- Я не мог понять, как правильно перенаправить на ту же страницу
- Мне приходилось вызывать метод из родительского элемента в каждом действии, что на самом деле непроблема, но я думаю, что должен быть какой-то более элегантный способ
- рендеринга контроллера с использованием встроенных контроллеров в ветке.Однако я не могу понять, , как правильно перенаправить .
Итак, каков общий подход к таким формам?
Редактировать:
Я ищу решение без сценария.