symfony: форма с одним параметром - PullRequest
1 голос
/ 16 августа 2010

У меня есть форма, и я хочу передать ей один параметр, который должен использовать для заполнения виджета.

Я передаю параметр в своем URL:

url_for('myModule/new?parameter='.$myParam)

Я пыталсявзять параметр в моем действии и отобразить его в моем шаблоне, но он не работает.

Действие:

$this->param = $request->getParameter('parameter');

Шаблон:

echo param;

НоЯ не могу восстановить его в своей форме.

Как я могу это сделать?

Ответы [ 4 ]

5 голосов
/ 16 августа 2010

Если этот параметр необходим для инициализации вашей формы, вы можете сделать это следующим образом (имейте в виду, что вы всегда должны проверять введенные пользователем данные)

  public function executeNew($request)
  {
    $formOptions = array('parameter' => $request->getParameter('parameter'));
    $this->form = new MyForm(array(), $formOptions);
    // Then within your form you access it with:
    // $parameter = $this->options['parameter'];
    // or even better:
    // $parameter = $this->getOption('parameter');
    ... more code ...
  }

Если параметр представлен как часть формытогда вы должны связать это так:

  public function executeNew($request)
  {
    $this->form = new MyForm();
    if ( $request->isMethod('post') ) {
      $this->form->bind($request->getPostParameters());
    }
    ... more code ...
  }

Пожалуйста, обратитесь к Формам Symfony в действии , чтобы узнать больше о том, как создавать и использовать формы.

Редактировать : добавлен $this->getOption('parameter') к примеру кода.

0 голосов
/ 29 марта 2011

Если параметр является атрибутом объекта, вы можете сделать:

$object = new Class();
$object->setAttribute($request->getParameter('myParam'));

$form = new ClassForm($object);
0 голосов
/ 16 августа 2010

Вам нужно передать его конструктору формы, оба конструктора sfForm и sf{Propel,Doctrine}Form принимают параметр с именем $options, используйте его.Сохраните значение в частном свойстве, чтобы его можно было использовать в методе configure формы.

0 голосов
/ 16 августа 2010

Вы должны определить маршрут для этого URL в вашем routing.yml и добавить свой параметр в этот маршрут.

например:

mymoduel_new:
   url:    myModule/new/:paramter/
   param:  { module: myModule, action: new }
...