tes*_*ter 3 forms validation ajax symfony
我有一个联系表单,我使用FormTypes和validation.yml进行渲染.提交的表单通过POST和AJAX发送到控制器操作.问题是,$form->isValid()
尽管我在表单中输入了正确的数据,但总是返回false.如果我删除validation.yml它仍然返回false.那么表单的验证从何处获取数据?为什么它总是返回假?
这是动作控制器:
public function contactAction()
{
$true = new Response(json_encode(true), 200);
$false = new Response(json_encode(false), 500);
$form = $this->createForm(new ContactType(), new Contact());
$request = $this->getRequest();
if($request->isMethod('POST') && $request->isXmlHttpRequest()){
$form->bind($request);
if($form->isValid()){
// email here
error_log('email worked');
return $true;
}
}
error_log('email not worked');
return $false;
}
Run Code Online (Sandbox Code Playgroud)
validation.yml:
Namespace\XYBundle\Entity\Contact:
properties:
name:
- NotBlank: ~
- Length:
min: 2
max: 20
email:
- NotBlank: ~
- Email: ~
message:
- NotBlank: ~
- Length:
min: 10
max: 10000
Run Code Online (Sandbox Code Playgroud)
这里是ajax调用的jQuery/JS代码:
$.ajax({
type: "post",
url: "contact",
data: "name=" + name + "&email=" + email + "&message=" + message,
error: function() {
$('.error').remove();
$('#sendError').slideDown('slow');
$('button').removeAttr("disabled");
$('button').css("color", "#333333");
},
success: function () {
$('.error').remove();
$('#success').slideDown('slow');
$("input[name='contact[name]']").val('');
$("input[name='contact[email]']").val('');
$("textarea[name='contact[message]']").val('');
$('button').removeAttr("disabled");
$('button').css("color", "#333333");
}
});
Run Code Online (Sandbox Code Playgroud)
由于您手动传递数据,因此忘记传入CSRF令牌字段(_token)
,导致它始终无效.
我建议做
data: $('#myForm').serialize()
以确保所有字段都被发送