【问题标题】:No route found for POST /email未找到 POST /email 的路由
【发布时间】:2015-08-13 17:59:14
【问题描述】:

控制器:

/**
     * @Route("/email/{name}/{email}/{subject}/{message}", name="email")
     * @Method({"GET", "POST"})
     */
    public function indexAction($name, $email, $subject, $message, Request $request){

        var_dump($name, $email, $subject, $message);
        die;
}

阿贾克斯:

<script type="text/javascript">
        $(document).ready(function() {
            $('#contact-form').submit(function(event) {
                $.ajax({
                    type:'POST',
                    url:'./email',
                    data:"/"+$('#name').val()+"/"+$('#email').val()+"/"+$('#subject').val()+"/"+$('#message').val(),
                    success:function(response){
                        alert(response)
                    }
                });
                event.preventDefault();
            });
        });
    </script>

我正在尝试向控制器提交 ajax 请求。不幸的是,我得到 404,并出现以下错误: 找不到“POST /email”的路由(来自“http://localhost/Portfolio/web/app_dev.php/”)

PS。控制器中的代码用于调试目的

【问题讨论】:

  • 首先运行app/console debug:router 看看你的路由是否存在。如果有重复的路由器,那么顶部的总是赢!

标签: ajax symfony


【解决方案1】:

您应该将控制器更改为仅接受 POST 请求,因此您不需要在路径中传递参数:

/**
 * @Route("/email, name="email")
 * @Method({"POST"})
 */

public function indexAction(Request $request){

//your code here

}

要在控制器中访问您的帖子参数,请使用$name = $request-&gt;request-&gt;get('name'); 或考虑使用Symfony Forms

您还需要更改您的 ajax 调用以在 data 中发送对象:

<script type="text/javascript">
    $(document).ready(function() {
        $('#contact-form').submit(function(event) {
            $.ajax({
                type:'POST',
                url:'/email',
                data: {
                     name: $('#name').val(),
                     subject: $('#subject').val(),
                     email: $('#email').val(),
                     message: $('#message').val()
                },
                success:function(response){
                    alert(response)
                }
            });
            event.preventDefault();
        });
    });
</script>

这将正确地向/email发送一个POST请求

【讨论】:

    【解决方案2】:

    路由/email/{name}/{email}/{subject}/{message}表示需要将Request发送到这样的URL

    /email/testName/example@gmail.com/TestSUbject/Testmessage
    

    如果您需要 /email 路由工作,只需将 @Route 注释更改为 /email

    在控制器中

    $request->request->get('email');
    //retrieve other fields
    ...
    

    .. 访问 POST 请求的值

    您还可以使用 Symfony 表单来利用它们提供的优势,例如验证、CSRF 保护等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-14
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2018-12-04
      • 2019-03-21
      • 2016-02-27
      相关资源
      最近更新 更多