3

そこで、Symfony2でサインイン(ログイン)フォームとサインアップ(登録)フォームでページを作りたいと思います。そして、私はこれを達成するための最良の方法は何でしょうか?

form属性の設定を検討しましたaction="/pathToMyFormProcess"が、問題が発生しました。そのアクションで同じテンプレート(HTMLページ)を表示したいのです。ただし、「/ pathToMyFormProcess」は、さまざまなテンプレートを使用したさまざまなアクションで呼び出されます。すべてのページに含まれるかレンダリングされるログインフォームのように。テンプレートごとに新しいパスとアクションを作成できました。しかし、この例が示すように、それは非常にイライラするでしょう:

私のサインアップアクションは次のようになります。

public function signupAction() {

    $loginForm = $this->get('loginform'); // Get the login form
    $signUpForm = $this->get('signupform'); // Get the signup form

    $loadData = ... /* Loading data needed for this page (could be last visitors, 
   countries, some information from database that should be displayed on the page) */

    return // SIGNUPTEMPLATE - array ( forms and data )

}

次に、誰かがログインフォームを使用した場合、たとえば、SignupControllerのアクションloginActionを使用して/ signup/loginに送信します。

public function signupAction() {

    $loginForm = $this->get('loginform'); // Get the login form
    $handler = $this->get('loginhandler'); // Get the handler

    $process = $handler->process(); // Process the request, try to log in basicly.
    if($process) {
      return // redirect or something - no problem
    }

    // Loading again, writing exact same code as signupAction()
    $signUpForm = $this->get('signupform'); // Get the signup form

    $loadData = ...

    return // SIGNUPTEMPLATE - array ( forms and data )
}

だから私はあなたがこれを達成する方法についてもっと良いアイデアがあるかどうか疑問に思っていますか?

4

4 に答える 4

2

ページにフォームをレンダリングすることもできます。次に例を示します。

あなたのlayout.html.twigで

{{ render(controller('SiteBundle:Login:login')) }}

次に、loginAction でログイン フォームをレンダリングします。

return $this->render('SiteBundle:Default:login-box.html.twig', array(
        'last_username' => $lastUsername,
        'error'         => $error,
        'csrf_token' => $csrfToken,
    ));

最後に、login-box.html.twig に html フォームがあります。

于 2013-07-18T14:26:26.300 に答える
0

このトピックの質問に対する私の回答を参照してください。単一のフォーム Type を作成し、それを使用して異なる ID を持つ同じフォームを生成する方法が説明されています (ただし、基になるエンティティの ID に基づいてその ID を保持します) N 回:

Symfony2で同じページに同じフォームタイプを複数回生成する

于 2015-08-21T11:25:22.140 に答える