2014-09-26 120 views
0

我在編輯表單中填寫了以下表單。Symfony2實體類型複選框設置首選選項

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

不知道我很理解你的問題ñ。您是否想要將更多的區域定義爲首選(而不是像您的示例中那樣只是當前選定的區域),以便他們進入列表頂部? – frumious 2014-09-26 10:20:13

+0

是想檢查更多地區 – Rakhitha 2014-10-07 03:31:07

+0

好的,我還是不明白,對不起!我希望Matthew A Thomas的回答給了你想要的東西(他描述瞭如何使某些選項「優先」,即將它們移動到列表的頂部,僅在編輯模式下(儘管Symfony文檔表明'preferred_choices'不是真的像這裏的複選框))。如果你想要別的東西,那麼也許你可以編輯你的問題來包含你目前得到的東西的例子,以及你想要得到什麼? – frumious 2014-10-07 07:36:31

回答

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, 

        )); 
     } 

}