0

Web サイトのいくつかのページで使用したいフォームがあります。だから私は自分のページでそのようなメソッドを呼び出します:

{{ render(controller('ProjectApplicationBundle:Application:form')) }}

そして、私は自分の formAction メソッドを持っています:

public function formAction()
{
    $form = $this->createForm($type,$obj);

    if('POST' == $this->getRequest()->getMethod()){
       $form->submit($this->getRequest());
       if($form->isValid()){
           //redirect to a page after the form
       }
    }
    //render the form template ...
}

これは私のコードではなく、単なる例です。

だから私は自分のフォームを送信するためのルートを作成するために追加します

project_application_form:
    pattern:  /form
    defaults: { _controller: ProjectApplicationBundle:Application:form }

今私の問題:)

1) URL を使用してフォームへのアクセスをブロックしたいのですが、データ処理を許可するだけです。

2)エラーの場合、ページはリダイレクトされないため、フォームはレイアウトなしで表示されるため、フォームをレンダリングするページにエラーのあるフォームを取得したいと思います。

編集: 2 番目の点の解決策があるかもしれませんが、これはあまり適切ではありません。my render の引数に設定し、render の代わりにルートに戻り、フォームをレンダリングします。最後に、セッションを使用してエラーを配置します。

私の英語で申し訳ありませんが、これがあなたにとって明確であることを願っています。

4

1 に答える 1

1

フォームを処理するアクションを保護し、次の方法でのみ使用できるようにする必要があります。POST

例 :

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

class RegisterController extends Controller
{
    /**
     * @Route("/register/process", name="process_form_register")
     * @Method({"POST"})
     */
    public function processAction(Request $request)
    {
        $form = $this->createFrom(new RegisterType());
        $form->submit($request);

        if($form->isValid()){
           //redirect to a page after the form
        }
    }
}

ymlルートの構文を使用すると、次のようになります。

process_form_register:
    pattern:  /register/process
    defaults: { _controller: ...... }
    requirements:
        _method:  POST

スレッドごとに1つの質問のみであり、それは別の問題であるため、2)ポイントの新しい質問を開きます

于 2013-10-10T09:27:41.297 に答える