3

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

2 に答える 2