2017-02-07 40 views
-1

我使用tetranz/select2entity-bundle到impliment選擇二與Symfony2的如何輸入發送到的onkeyup symfony的控制器

所以我的形式成爲這樣的:

$builder->add('nom', Select2EntityType::class, [ 

     'remote_route' => 'find_tags', 
     'class' => 'Emploi\AppBundle\Entity\Tags', 
     'primary_key' => 'id', 
     'text_property' => 'name', 
     'minimum_input_length' => 2, 
     'page_limit' => 10, 
     'allow_clear' => true, 
     'delay' => 250, 
     'language' => 'fr', 
     'placeholder' => 'Select a tag', 

    ]) 

我的路線:

find_tags: 
    path:  /find_tags 
    defaults: { _controller: EmploiAppBundle:Tags:findTags } 

所以現在我需要搜索標籤onkeyup我用在 枝:

{{ form_start(form) }} 
{{ form_widget(form.nom, {'attr': {'id': 'tagsID'}}) }} 
{{ form_widget(form.score) }} 
<input type="submit" value="Create"/> 
{{ form_end(form) }} 

我在TagsController功能,因爲select2entity束需要有兩個屬性的「身份證」和「文本」的JSON響應:

public function findTagsAction(Request $request) 
{ 
    $data = $request->get('input'); 
    $em = $this->getDoctrine()->getManager(); 
    $query = $em->createQuery('' 
     . 'SELECT c.id, c.name ' 
     . 'FROM EmploiAppBundle:Tags c ' 
     . 'WHERE c.name LIKE :data ' 
     . 'ORDER BY c.name ASC' 
    ) 
     ->setParameter('data', '%' . $data . '%'); 
    $tags = $query->getResult(); 

    $arrayCollection = array(); 

    foreach($tags as $item) { 
     $arrayCollection[] = array(
      'id' => $item['id'], 
      'text' => $item['name'] 
     ); 
    } 
    return new JsonResponse($arrayCollection); 
} 

,併發送輸入值我用這個Ajax代碼:

$(document).ready(function(){ 
    $("#tagsID").on('keyup', function() { 
     var input = $(this).val(); 
     if (input.length >= 2) { 

     var data = {input: input}; 

     $.ajax({ 
      type: "POST", 
      url: "{{ path('find_tags') }}", 
      data: data, 
      dataType: 'json', 
      timeout: 3000, 
      success: function(response){ 
      }, 

     }); 
    } 
}); 
}); 

現在的問題是,findTagsAction()總是返回所有標籤並且沒有檢測到輸入值。

+1

什麼是$ data = $ request-> get('input')的值? ? – pbenard

+0

我認爲這是null,因爲總是findTagsAction()返回所有結果 –

回答

0

的解決方案是非常簡單的,select2entity束自動分配一個ID,這就是爲什麼JavaScript不能找到form_widget ID =「tagsID」因此,我們需要從該行刪除此

{'attr': {'id': 'tagsID'}} 

{{ form_widget(form.nom, {'attr': {'id': 'tagsID'}}) }} 

但是到了CSS ID添加到樹枝上的form_widget正確的方法是:

{{ form_widget(form.nom, { 'id' : 'tagsID' }) }} 

在以往任何時候,當我看着的文本字段中鍵入時發出的AJAX請求,我發現這個GET方法:

http://127.0.0.1:8000/find_tags?page_limit=10&q=xxx

所以現在我們需要在我們的控制器可以改變:

$data = $request->get('input'); 

通過這樣的:

$data = $request->get('q'); 

PS:刪除先前寫入的所有JavaScript

0
function goToUrl(id_to_send) { 
     var path="{{ path('players_team', { 'id':"PLACEHOLDER" }) }}"; 
     var url = path.replace("PLACEHOLDER", id_to_send); 
    $.ajax({url: url, success: function(result){ 
    $("#players").replaceWith(result); 
}}); 

} 

你只需要在onKeyUp方法中調用這個mehode,在我的情況下我檢索結果,並用$(「#players」)替換它。

相關問題