Symfony2实体类型复选框设置首选项

时间:2014-09-26 04:27:44

标签: forms symfony entity

我在编辑表格中提交了以下表格。

->add('district', 'entity', array(
                    'class' => 'AdminBundle:Districts',
                               'query_builder' => function(EntityRepository $repository) {
                return $repository->createQueryBuilder('c')
                                    ->where('c.status =:status')
                                    ->setparameter('status','1');
            },
                    'property' => 'districtName',
                    'preferred_choices' => array($details->getDistrict()),
                    'multiple' => TRUE,
                    'expanded' => TRUE,
                    'required' => true,

                        )
                )

这是复选框的输出。我可以在这里查看更多地区。 在编辑模式下如何设置首选选项?

1 个答案:

答案 0 :(得分:1)

好的,您需要对表单使用EventListener。有关详细信息,请参阅文档。

这将允许您预先设置表单数据

示例()

/ *表格* /

 namespace Company\YourBundle\Form\Type;

 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Doctrine\ORM\EntityRepository;
 use Company\YourBundle\Form\EventListener\YourEventListener;

 class FormType extends AbstractType {

     public function buildForm(FormBuilderInterface $builder, array $options) {
         $builder->addEventSubscriber(new YourEventListener($builder->getFormFactory()));
     }

     public function getName() {
         return 'company_formtype';
     }

}

/ *事件监听器(您可能需要从表单中将更多数据传递给此类,因为我没有什么信息可以帮助您)* /

 namespace Company\YourBundle\Form\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;

class ActivityListener implements EventSubscriberInterface {

private $form;

public function __construct($form) {
    $this->form = $form;
}

public static function getSubscribedEvents() {
    return array(
        FormEvents::PRE_SET_DATA => 'onPreSetData',
    );
}

public function onPreSetData(FormEvent $e) {
    $data = $e->getData();
    $form = $e->getForm();

    if ($form->has('district')) {
        $form->remove('district');
    }

    $form->add($this->form->createNamed('district', 'entity', null, array(
                        'class' => 'AdminBundle:Districts',
                           'query_builder' => function(EntityRepository $repository) {
            return $repository->createQueryBuilder('c')
                                ->where('c.status =:status')
                                ->setparameter('status','1')},
                                'property' => 'districtName',
                'preferred_choices' => $data['id'] ? /** in edit mode set the preferred **/ ? null,
                'multiple' => TRUE,
                'expanded' => TRUE,
                'required' => true,

                    ));
      }

 }