2014-09-26 5 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

+0

да хотите проверить больше районов – Rakhitha

+0

Хорошо, я до сих пор не понимаю, извините! Я надеюсь, что ответ Мэтью Томаса даст вам то, что вы хотите (он описывает, как сделать определенные опции «предпочтительными», т. Е. Переместить их в начало списка, только в режиме редактирования (хотя документы Symfony предлагают, что 'preferred_choices' не является действительно для флажков, как здесь)). Если вы хотите что-то еще, то, может быть, вы можете отредактировать свой вопрос, чтобы включить примеры того, что вы получаете в настоящее время, и что вы хотите получить вместо этого? – frumious

ответ

1

OK, вам нужно использовать 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'; 
    } 

} 

/* Event Listener (Вы можете потребовать, чтобы передать больше данных в этот класс из вашей формы, так как у меня мало информации, чтобы помочь вам) */

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, 

        )); 
     } 

} 
Смежные вопросы