控制器:
/**
* @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保护等。