2013-05-28 4 views
1

Я пишу три простую форму. Они все одинаковы, за исключением части после проверки проверки, поэтому я решил создать вид «шаблона», содержащий весь код до проверки, если инструкция.Переменная в названии маршрута

Эти три функции содержат, таким образом, только код, отвечающий за правильную обработку формы.

Функция шаблона выглядит вроде как это:

public function templateAction($formName) { 
    $form = $this->createForm(new {$formName.'Type'}() new $formName()); 
    $request = $this->getRequest(); 
    if($request->getMethod() == 'POST') { 
     $form->bind($request); 
     if($form->valid()) { 
     $this->{'set'.$formName}($form); 
     return array(); 
     } 
    } 
} 

Теперь, имея Foo форму, передавая ее имя (Foo) в качестве параметра, я получаю форму вынесенное на основе только на его имя, и соответствующие частные методы, содержащие это имя.


Вопрос заключается в том - как я могу использовать $this->redirect() функцию, чтобы вызвать этот метод «шаблон» и передать правильный параметр?

/** 
* @Route("/FooController/Template/{formName}", name="/FooController/Template/{formName}") 
*/ 

Это не работает - С.Ф. выдает ошибку, что маршрут не был найден ... Я также попробовал некоторые другие комбинации, но никто не работал ... как я должен справиться с этим?


Является ли эта «шаблонная» форма способ получения o.k.? Я думал, что это может повторить повторения, но что, если бы у меня был один метод, который должен иметь другой код перед частью проверки?

Кроме того, есть ли способ отделить форму от контроллера и поместить ее в другое место?

ответ

0

Прежде всего, названия маршрутов должны быть примерно такими: foocontroller_template или что угодно.

/** 
* @Route("/FooController/Template/{formName}", name="/FooController/Template/{formName}") 
*/ 

Во-вторых, если вы звоните ->redirect() метод внутри контроллера, вы должны - как хорошая практика - пусть маршрутизатор генерировать маршрут для вас, что-то вроде

$this->get('router')->generate('foocontroller_template', array('formName' => 'foobarform'));

Очевидно, что путь, вам нужно параметризовать - и, следовательно, сделать его динамичным - ваше действие.

Смежные вопросы