找不到POST/电子邮件的路由



控制器:

/**
     * @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;
}

Ajax:

<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/电子邮件"的路由(来自http://localhost/Portfolio/web/app_dev.php/"(

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

您应该将控制器更改为只接受POST请求,这样您就不需要在以下路径中传递参数:

/**
 * @Route("/email, name="email")
 * @Method({"POST"})
 */
public function indexAction(Request $request){
//your code here
}

要访问控制器中的post参数,请使用$name = $request->request->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请求

路由/email/{name}/{email}/{subject}/{message}意味着您需要将请求发送到类似的URL

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

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

和控制器

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

访问POST请求的值

此外,您还可以使用Symfony Forms来利用它们提供的优势,如验证、CSRF保护等。

相关内容