Как работать с типом поля формы объекта и автозаполнением JUI в Symfony2? - PullRequest
3 голосов
/ 08 октября 2011

У меня есть форма, где у меня есть entity тип поля, с помощью которого пользователь может выбрать связанный Client объект. Он отлично работает в среде разработчиков, но в производстве будут доступны тысячи клиентов, и типы полей формы HTML не смогут справиться с этим.

Я написал действие, которое использует Zend Lucene и возвращает клиентов в формате JSON для автозаполнения JUI. Как включить это автозаполнение с типом поля формы entity?

1 Ответ

1 голос
/ 09 октября 2011

Это не точно ответ, который вы хотите, потому что я сделал это с полем выбора, и это своего рода обходной путь. Это форма, в которой вы можете выбрать получателей для отправки сообщения (= кампания):

В форме:

    public function __construct(EntityManager $em, Campaign $campaign) {
        $this->campaign = $campaign;
        $this->em = $em;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $contactChoices = array('0'=>'');
        if($this->campaign && $this->campaign->getRecipientContacts()){
            foreach($this->campaign->getRecipientContacts() as $contact){
                $contactChoices[$contact->getHash()] = $contact->getName();
            }
        }
        $builder->add('subject')
                ->add('message','textarea')
                ->add('recipientContacts','choice', array(
                        'required' => false,
                        'multiple' => true, // manage multiple choices
                        'choices' => $contactChoices,
                        'property_path' => false,
                    ))
                ...

Затем в контроллере: получить опубликованные контакты и назначить их для кампании:

       if($this->getRequest()->getMethod() == 'POST'){
            $campaign->removeRecipientContacts();
            $data = $this->getRequest()->get('campaignForm');

            if(isset($data['recipientContacts'])){
                foreach($data['recipientContacts'] as $hash){
                   $contact = $this->getRepo()->getContactByHash($hash);
                   $campaign->addRecipientContact($contact);
                }
            }
        }

Это позволяет вам использовать любой виджет JS (автозаполнение, ...) во внешнем интерфейсе. Просто добавьте параметры в поле выбора. Вид:

function addContact(hash,name){
     $('#campaignContactChoiceSelectField').append('<option value="'+hash+'">'+name+'</option>');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...