我有一個聯繫表單,我使用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;
}
的validation.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");
}
});
如果要發送一個JSON回來,你可以使用JsonResponse響應,而不是http://api.symfony.com/2.1/Symfony/Component/HttpFoundation/JsonResponse.html – Kris