【问题标题】:symfony : Form with one parametersymfony : 带有一个参数的表单
【发布时间】:2010-08-16 11:39:40
【问题描述】:

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

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

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

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

行动:

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

模板:

echo param;

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

我该怎么做?

【问题讨论】:

    标签: forms symfony-1.4 parameter-passing


    【解决方案1】:

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

      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')

    【讨论】:

    • 我已经使用 $formOptions 尝试了您的第一个解决方案。但是 xDebug 叫我:'parameter' => null。但是我在我的 URL 中传递了一些东西。我不明白为什么。
    • 当你在表单的configure方法中调用$this->getOption('parameter'),它返回什么?
    • 我有一个错误:“调用未定义的方法 sfPartialView::getOption”。问题不在于恢复值的方法,问题是参数没有传递给模板。
    • 在我看来,我误解了你的问题。你是使用 Symfony Forms 框架还是使用“form”来表示纯 HTML 表单?
    • @lunohodov 我尝试使用$this->getOption('parameter') 获得选项,但没有成功。看起来正确的方法是从 Form 实例中获取它,如下所示:$this->form->getOption('parameter')
    【解决方案2】:

    你必须在你的 routing.yml 中为这个 URL 定义一个路由,并将你的参数添加到这个路由中。

    例如:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果参数是对象的属性,你可以这样做:

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

        【讨论】:

        • 或者如果您需要表单选项$form = new ClassForm($object, array("myoption" => $request->getParameter("myOption")));
        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        相关资源
        最近更新 更多