Symfony2:为扩展的多选字段设置“set”值(复选框)

时间:2012-04-02 09:09:26

标签: php forms symfony

当提交表单并再次显示刷新后,请求被绑定以形成并显示所选值。如果之前没有提交表单,我想用外部数组(在我的情况下是session)中的数据来保存表单。 Form是数组类型,未连接到任何实体,因为它作为db filter。

我选择了表格字段展开,多个(复选框)配置如下:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这不是一件容易的事,但经过几个小时的思考后,我设法做到了。下面我展示了我的代码非常适合将数据从会话移动到窗体,反之亦然

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