簡體   English   中英

如何使用實體表單字段類型和Symfony2中的JUI自動完成?

[英]How to work with entity form field type, and JUI autocomplete in Symfony2?

我有表單,我有entity字段類型,使用戶可以選擇相關的Client實體。 它在開發環境中運行良好,但在生產中將有數千個客戶端可供選擇,HTML表單字段類型將無法處理此問題。

我寫過動作巫婆使用Zend Lucene並以JSON格式返回JUI自動完成的客戶端,我如何使用entity表單字段類型啟用此自動完成?

這不正是你想要的答案,因為我有一個選擇字段做了,而且它是一種工作的周圍。 這是一個表單,您可以選擇接收方發送消息(=廣告系列):

在FormType中:

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>');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM