0

これは、ユーザーが私のアプリケーションにログインする方法の概要です(データの検証まで)。

  1. ログインフォームを送信します。

  2. ルーターは、ユーザーがどこに行こうとしているのかを把握します。

  3. 正しいものControllerが初期化されます。

  4. RecognitionServiceが開始され、メソッドlogin()が実行されます。

  5. メソッド内でlogin()、提供されたユーザー名とパスワードをUserドメインオブジェクトに設定しました。

  6. 私のUserドメインオブジェクトは、タイプ、長さ、形式などをチェックすることにより、ユーザー名とパスワードが有効かどうかをチェックします。

View入力したユーザー名に無効な文字が含まれていて、ドメインオブジェクトからエラーメッセージがきちんと整理された方法で返される場合を除いて、これはすべて問題ありません。

現時点では、ドメインオブジェクトにメッセージ(実際にはメッセージの配列キー)を返してもらい、RecognitionServiceメッセージ配列キーを保持します。次に、Viewからメッセージ配列キーを取得し、RecognitionServiceそれを使用してを表示します。正しいメッセージですが、もっと良い方法があると思います。何かアイデアはありますか?

ありがとう。

4

1 に答える 1

2

コントローラと現在のビューは、サービスをインスタンス化するために同じファクトリを共有する必要があります。これにより、各サービスが1回だけ初期化されます。

コントローラーから:

public function postLogin( $request )
{
    $recognition = $this->serviceFactory->create('Recognition');
    $recognition->authenticate( $request->getParameter('username'),
                                $request->getParameter('password') );
}

ビューから:

public function login()
{
    $recognition = $this->serviceFactory->create('Recognition');
    if ( $recognition->hasAuthenticationError() )
    {
        header('Location: /login');
    }

    if ( $recognition->hasChangedState() ) //was POST, PUT or DELETE call
    {
        header('Location: ./');
    }
}

public function render()
{
    // .. make the html/json/whatever
}

このようなもの..それは私の2セントです。正直なところ、ビューをどのように実装するかは完全にあなた次第です。

于 2013-03-24T10:28:03.793 に答える