【问题标题】:Symfony2: setting "set" value for expanded multiple choice field (checkbox)Symfony2:为扩展的多项选择字段(复选框)设置“设置”值
【发布时间】:2012-04-02 09:09:25
【问题描述】:

当表单提交并再次显示刷新后,请求被绑定到表单并显示选定的值。如果之前未提交表单,我想使用来自外部数组(在我的情况下为会话)的数据来水合表单。表单是数组类型,不连接任何实体,作为db过滤器。

我有选择表单域展开,多个(复选框)配置如下:

    $categoryForm = array();
    $form = $this->createFormBuilder( $categoryForm )
                 ->add( 'id', 'choice', array( 'choices' => $arrayOfChoices,
                                               'multiple' => true,
                                               'expanded' => true ) )
                 ->getForm();
    if ( $request->getMethod() == 'POST' ) {
        $form->bindRequest( $request );
    }

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

    您必须将变量传递给表单(在控制器中),然后在构建器类中使用传递的变量。

    【讨论】:

    • 你能更精确一点吗?在哪里通过呢?到 $categoryForm?还是使用 setData() 方法?如果 data 是一个选择数组,那么 setData() 怎么办?
    【解决方案2】:

    这并不容易,但经过数小时的思考,我设法做到了。下面我展示了我的代码非常适合将数据从会话移动到表单,反之亦然

        //bind filters from session to form
        $sessionFilter = $session->get('filter');
        if ( !is_null( $sessionFilter ) ) {
           $form->bind( $sessionFilter );
        }
    
        if ( $request->getMethod() == 'POST' ) {
            $form->bindRequest( $request );
            $formData = $form->getData();
    
            if ( count($formData) > 0 ) {
                foreach ( $formData as $fdkey => $data ) {
                    if ( $fdkey == 'id' OR $fdkey == 'morezero' ) {
                        foreach ( $data as $value ) {
                            $sessionData[$fdkey][$value] = $value ;
                        }
                    }
                }
                $session->set( 'filter', $sessionData );
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多