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;
}
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");
}
});