如何从AJAX获取输入文本值到symfony控制器

问题描述:

我有一个问题,在我的控制器中获取我的输入文本值。如何从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

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

不可以,我怎么改变它? –

的$类型参数是通过查询字符串传递

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

我发现在我的控制器$request = $request->get('type');总是返回null,所以我用$lib = $request->getContent();试过,然后我做了dump($lib);显示它所包含的内容,这里是输出:

enter image description here

所以后我使用substr函数来只提取文本值并删除其余部分,一切正常。