Symfony2:设置“;设置“;展开的多选字段(复选框)的值


Symfony2: setting "set" value for expanded multiple choice field (checkbox)

提交表单并再次显示刷新后,Request将绑定到表单并显示选定的值。如果以前没有提交表单,我想用来自外部数组的数据(在我的情况下是会话)来水合表单。Form是数组类型,不连接到任何实体,因为它充当数据库过滤器。

我已经扩展了选择表单字段,多个(复选框)配置如下:

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

您必须将变量传递到表单(在controler中),然后在生成器类中使用传递的变量。

这不是一个容易的例子,但经过数小时的思考,我终于做到了。下面我展示了我的代码在将数据从会话移动到表单以及从移动到表单方面的出色工作

    //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 );
        }
    }