我有一个联系表单,我使用 FormTypes 和它的 validation.yml 呈现。提交的表单通过 POST 和 AJAX 发送到控制器操作。问题是$form->isValid()
尽管我在表单中输入了正确的数据,但它总是返回 false。如果我删除了validation.yml,它仍然返回false。那么表单的验证从哪里获取数据呢?为什么总是返回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;
}
验证.yml:
Namespace\XYBundle\Entity\Contact:
properties:
name:
- NotBlank: ~
- Length:
min: 2
max: 20
email:
- NotBlank: ~
- Email: ~
message:
- NotBlank: ~
- Length:
min: 10
max: 10000
这里是 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");
}
});