Symfony — Перенаправление на действие с заполненными значениями формы

#symfony1 #symfony-1.4 #symfony-forms

#symfony1 #symfony-1.4 #symfony-forms

Вопрос:

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

У меня есть действие, и я хочу вызвать redirect () что-то вроде:

 $this->redirect('foo/search?Search[last_name]='.$this->form->getValue('last_name'));
  

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

 public function executeSearch(sfWebRequest $request)
{
   $this->form = new SearchForm();
   $submission = $request->getParameter($this->form->getName());
   ...do stuff with $submission...
  

Форма поиска имеет формат имени ‘Search[%s]’.

Ничего из того, что я пробовал для параметра redirect(), не сработало. Параметры Search[] всегда каким-то образом перепутываются и не будут заполнять форму.

Ответ №1:

Я бы попытался заставить Symfony сгенерировать для вас URL-адрес на основе маршрута и параметров:

 @search = a route for your search action in your routing.yml

$parameters = array of the parameters you want to pass

$url = $this->generateUrl('search', $parameters);
$this->redirect($url);
  

Массив параметров должен иметь следующий формат…

 'Search[something1]' => 'value1'
'Search[something2]' => 'value2'
  

… таким образом, URL принимает их как:

 ?Search[something1]=value1amp;Search[something2]=value2
  

После этого вы сможете использовать…

 $this->form->bind($request->getParameter('Search'));
(for binding)
  

… и, возможно, даже…

 $this->form->setDefaults($request->getParameter('Search'));
(for populating for a template)
  

Надеюсь, это поможет или, по крайней мере, подскажет вам несколько идей.

Комментарии:

1. Да! Спасибо. Я раньше не видел этот метод generateUrl (). Создание URL-адресов с маршрутизацией в Symfony дает мне больше возможностей, чем что-либо еще в фреймворке.

Ответ №2:

Попробуйте это решение.

Другой метод заключается в сохранении данных отправки в сеансе пользователя.