代码之家  ›  专栏  ›  技术社区  ›  Elorfin

symfony:带有一个参数的窗体

  •  1
  • Elorfin  · 技术社区  · 14 年前

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

    我在url中传递参数:

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

    行动:

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

    模板:

    echo param;
    

    我该怎么做?

    4 回复  |  直到 12 年前
        1
  •  5
  •   lunohodov    14 年前

      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 ...
      }
    

    Forms in Action

    编辑 :已添加 $this->getOption('parameter')

        2
  •  0
  •   funkdoobiest    14 年前

    mymoduel_new:
       url:    myModule/new/:paramter/
       param:  { module: myModule, action: new }
    
        3
  •  0
  •   Maerlyn    14 年前

    您需要将它传递给窗体构造函数,两个 sfForm sf{Propel,Doctrine}Form 取一个名为 $options ,用那个。将值存储在私有属性中,以便可以在窗体的 configure 方法。

        4
  •  0
  •   Elorfin    14 年前

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

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