Это не точно ответ, который вы хотите, потому что я сделал это с полем выбора, и это своего рода обходной путь. Это форма, в которой вы можете выбрать получателей для отправки сообщения (= кампания):
В форме:
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>');
}