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

时间:2016-11-23 22:45:57

标签: 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

在文本字段中输入“BMW”时,单击验证按钮,我希望它只显示BMW模型和要重定向的URL。

3 个答案:

答案 0 :(得分: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));

}

答案 1 :(得分:0)

$ type参数通过查询字符串

传递
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));

}

这对你有帮助吗?

答案 2 :(得分:0)

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

enter image description here

之后,我使用substr函数只提取文本值并删除其余内容,一切运行良好。