symfony:带有一个参数的表单

时间:2010-08-16 11:39:41

标签: forms symfony-1.4 parameter-passing

我有一个表单,我想传递一个必须用来填充小部件的参数。

我在我的网址中传递参数:

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

我试图在我的操作中获取参数并将其显示在我的模板中,但它不起作用。

行动:

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

模板:

echo param;

但是我无法以我的形式恢复它。

我该怎么做?

4 个答案:

答案 0 :(得分:5)

如果初始化表单需要此参数,那么您可以这样做(请记住,您应该始终验证用户输入)

  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的Forms in Action

修改:在代码示例中添加了$this->getOption('parameter')

答案 1 :(得分:0)

您必须在routing.yml中为此网址定义路线,并将参数添加到此路线。

例如:

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

答案 2 :(得分:0)

您需要将其传递给表单构造函数,sfFormsf{Propel,Doctrine}Form的构造函数都使用名为$options的参数,然后使用它。将值存储在私有属性中,因此您可以使用表单的configure方法。

答案 3 :(得分:0)

如果参数是对象的属性,则可以执行以下操作:

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

$form = new ClassForm($object);