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

Controller:

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

I am trying to submit ajax request to the controller. Unfortunately i get 404, and the following error: No route found for "POST /email" (from "http://localhost/Portfolio/web/app_dev.php/")

PS. The code in the controller is for debuging purposes

the route /email/{name}/{email}/{subject}/{message} means that you need to send the Request to an URL like this

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

if you need the /email route to work just change the @Route annotation to /email

and in controller

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

.. to access the values of the POST request

Also you can also use Symfony Forms to take the Advantages they offer like validation , CSRF Protection , etc

You should change your controller to accept only POST request and so you don't need to pass your arguments in the path :

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

public function indexAction(Request $request){

//your code here

}

To access your post parameters in the controller, use $name = $request->request->get('name'); or consider using Symfony Forms

You also need to change your ajax call to send an object in 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>

This will properly send a POST request to /email