2016-11-23 87 views
-1

我有一個問題,在我的控制器中獲取我的輸入文本值。如何從AJAX獲取輸入文本值到symfony控制器

這是我的AJAX腳本:

$(document).ready(function() { 
    $('#valider').click(function() { 
     var searchText = $('#searchText').val(); 
     $.ajax({ 
      type: "POST", 
      url: "/firstproject/web/app_dev.php/parc/searchmodel/"+searchText, 
      data:{'type':searchText}, 
      success: function (response) { 
       console.log(response); 
      }, 
      error: function (response,xhr,status) { 
       alert("erroe"+status); 
      } 
     }); 
    }); 
}); 

這是我view.twig在那裏我有一個文本輸入:

{% block javascripts %} 
    <script src="{{ asset('bundles/js/jquery.min.js') }}"></script> 
    <script src="{{ asset('bundles/js/script.js') }}"></script> 
{% endblock %} 
<input type="text" id="searchText" name="searchText" value=" "placeholder="search by libel"> 
<input id="valider" type="submit" value="valider"> 
<h1>La liste des modeles</h1> 
<table border="1">  
    <tr> 
     <th>Id</th> 
     <th>Libelle</th> 
     <th>pays</th> 
     <th>modifier</th> 
     <th>supprimer</th> 
    </tr> 
    {% for m in mod %} 
     <tr> 
      <td>{{ m.id }}</td> 
      <td>{{ m.libelle}}</td> 
      <td>{{ m.pays }}</td> 
      <td> 
       <a href="{{ path('updatemodel',{'id':m.id}) }}">modifier</a> 
      </td> 
      <td><a href="{{ path('deletemodel',{'id':m.id}) }}">supprimer</a></td> 
     </tr> 
    {% endfor %} 
</table> 

這是我的控制器操作:

public function searchAction(Request $request){ 

     $request->request->get('type'); 

     dump($request); 
     $em = $this->getDoctrine()->getManager(); 
     $modele = $em->getRepository("EspritParcBundle:Modele") 
      ->searchbyLib($request); 

     return $this->render("EspritParcBundle:Modele:searchmodel.html.twig",array('mod'=>$modele)); 

    } 

這是我的自定義功能searchbylib

class ModeleRepository extends EntityRepository 
{ 
    public function searchbyLib($libele) 
    { 
     $em = $this->getEntityManager() 
       ->createQuery('SELECT m FROM EspritParcBundle:Modele m 
       WHERE m.libelle LIKE :libele') 
       ->setParameter('libele',$libele); 

     dump($em->getResult()); 
     return $em->getResult();  
    } 
} 

最後,我的路由文件:

searchmodel: 
    path:  /searchmodel/{type} 
    defaults: { _controller: EspritParcBundle:Modele:search} 

這是我的輸出:

enter image description here

當在文本字段中輸入 「寶馬」,然後點擊確認按鈕,我希望它只向我展示寶馬車型和網址將被重定向。

+0

alert(searchText);你給了什麼? – hous

+0

它給我的文字輸入值 –

+0

嘗試刪除「dump($ em-> getResult());」和「dump($ request);」 – ghazi2008

回答

0

view.html.twig

{% block javascripts %} 
     <script src="{{ asset('bundles/js/jquery.min.js') }}"></script> 
     <script src="{{ asset('bundles/js/script.js') }}"></script> 
    {% endblock %} 
<form action="{{ path('searchmodel') }}" method="POST"> 
     <input type="text" id="searchText" name="searchText" value=" "placeholder="search by libel"> 
     <input id="valider" type="submit" value="valider"> 
    </form> 
    <h1>La liste des modeles</h1> 
    <table border="1"> 

     <tr> 
      <th>Id</th> 
      <th>Libelle</th> 
      <th>pays</th> 
      <th>modifier</th> 
      <th>supprimer</th> 
     </tr> 

     {% for m in mod %} 
      <tr> 
       <td>{{ m.id }}</td> 
       <td>{{ m.libelle}}</td> 
       <td>{{ m.pays }}</td> 
       <td> 
        <a href="{{ path('updatemodel',{'id':m.id}) }}">modifier</a> 
       </td> 
       <td><a href="{{ path('deletemodel',{'id':m.id}) }}">supprimer</a></td> 
      </tr> 
     {% endfor %} 
    </table> 

路由文件:

searchmodel: 
path:  /searchmodel 
defaults: { _controller: EspritParcBundle:Modele:search} 

控制器:

public function searchAction(Request $request){ 

    $request = $request->get('type'); 


    $em = $this->getDoctrine()->getManager(); 
    $modele = $em->getRepository("EspritParcBundle:Modele") 
     ->searchbyLib($request); 

    return $this->render("path:to:view.html.twig",array('mod'=>$modele)); 

} 
+0

相同的問題沒有改變 –

+0

你有嘗試更改網址? – ghazi2008

+0

不可以,我怎麼改變它? –

0

的$類型參數是通過查詢字符串傳遞

searchmodel: 
    path:  /searchmodel/{type} 
    defaults: { _controller: EspritParcBundle:Modele:search} 

所以,你可以直接將其添加到像這樣的方法的參數:

public function searchAction(Request $request, $type) 
{ 



    $em = $this->getDoctrine()->getManager(); 
    $modele = $em->getRepository("EspritParcBundle:Modele") 
     ->searchbyLib($request); 

    return $this->render("path:to:view.html.twig",array('mod'=>$modele)); 

} 

那是幫你?

+0

沒有人沒有任何變化沒有顯示,也沒有我的網址變化 –

+0

嗯,我想起初在這裏使用ajax是錯過的。您正試圖在返回html的路線上使用該帖子。 爲什麼不使用symfony標準功能的表單,然後通過表單管理你的postData。 你有相同的路線,我認爲這不是最好的辦法。 對於輸入字段,我使用了一個選擇字段,其中包含您的模型的所有名稱(具有唯一的重複過濾器),您不必在查詢中進行管理,並使用findBy函數。 – jeremy

0

我發現在我的控制器$request = $request->get('type');總是返回null,所以我用$lib = $request->getContent();試過,然後我做了dump($lib);顯示它所包含的內容,這裏是輸出:

enter image description here

所以後我使用substr函數來只提取文本值並刪除其餘部分,一切正常。