如何从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}
这是我的输出:
当在文本字段中输入 “宝马”,然后点击确认按钮,我希望它只向我展示宝马车型和网址将被重定向。
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));
}
的$类型参数是通过查询字符串传递
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));
}
那是帮你?
没有人没有任何变化没有显示,也没有我的网址变化 –
嗯,我想起初在这里使用ajax是错过的。您正试图在返回html的路线上使用该帖子。 为什么不使用symfony标准功能的表单,然后通过表单管理你的postData。 你有相同的路线,我认为这不是最好的办法。 对于输入字段,我使用了一个选择字段,其中包含您的模型的所有名称(具有唯一的重复过滤器),您不必在查询中进行管理,并使用findBy函数。 – jeremy
alert(searchText);你给了什么? – hous
它给我的文字输入值 –
尝试删除“dump($ em-> getResult());”和“dump($ request);” – ghazi2008