1

ダイナミックなフォルムをしています。

たとえば、フォームに FormType1 が含まれている場合、フォームに FormType2 または FormType3 が含まれている場合 ....

私のフォームが変更されているかどうかを検出します。
フォームが完成しvalid()たらメソッドを適用し、フォームにエラーがあれば返すか、エラーがなければリダイレクトを適用します。
私はそれを行う方法を知っています。

ただし、フォームが変更なしで (新しい値なしで) 送信された場合、検証が必須フィールドで false を返すため、検証なしで他のリダイレクトを適用したいと考えています。

フォームにコンボボックス、ブール値、または初期値がある可能性があるため、すべての値がnullかどうかをテストできません...

JavaScriptと2つの送信ボタンを備えたソリューションがあります。
ボタン送信の値が「just_redirection」の場合は検証を適用しません。それ以外の場合は検証を適用します。

Symfony2 (または完全な PHP)に、送信されたフォームが最初のフォームと同じかどうかを知る方法はありますか?

4

1 に答える 1

1

フォームがエンティティにバインドされていると仮定MyEntityします。コントローラーで元のオブジェクトをコピーし、フォームにリクエストを処理させてから、オブジェクトを比較する必要があります。

public function aRouteAction(Request $request, MyEntity $myEntity)
{
    $entityFromForm = clone $myEntity;
    // you need to clone your object, because since PHP5 a variable contains a reference to the object, so $entityFromForm = $myEntity wouldn't work

    $form = $this->createForm(new MyFormType(), $entityFromForm);
    $form->handleRequest($request);

    if($entityFromForm == $myEntity) {
        // redirect when no changes
    }

    if($form->isValid()) {
        // redirect when there are changes and form submission is valid
    }
    else {
        // return errors
    }
}

オブジェクトの複製については、 php のマニュアルを参照してください。

于 2016-09-02T08:47:15.157 に答える