User
、MVC のコンテキストは、ドメイン オブジェクトです。ただし、セッションはストレージ メディアの形式です (キャッシュ、データベース、ファイル システムと同様)。そこにインスタンスからデータを保存する必要がUser
ある場合は、ある種のデータマッパーを使用してそれを行います。
$user = $this->domainObjectFactory->build('user');
$user->setName('Korben')
->setSurname('Dallas');
if ( some_condition )
{
$mapper = $this->dataMapperFactory->create('session');
$mapper->store($user);
}
このコードは、セッションとユーザー間のやり取りの非常に単純化された例を提供する必要があります。
ユーザー クラスはどこに追加しますか?
ドメイン オブジェクトとして、User
インスタンスはサービス内で使用し、ファクトリを使用して初期化する必要があります。MVC のコンテキストでは、サービスはモデル層の構造であり、アプリケーション ロジックを扱います。これらは、ドメイン オブジェクトとストレージの抽象化の相互作用を操作および促進します。
MVC にユーザー クラスを追加して含めるにはどうすればよいですか?
すべてのクラスは、オートローダーを使用して追加する必要があります。の使用についてspl_autoload_register()
、できれば名前空間の使用について読む必要があります。
インスタンス自体の初期化はファクトリで行う必要があります。これにより、コードをそのインスタンスのクラス名から切り離すことができます。
アプリケーションでユーザー クラスを実行するにはどうすればよいですか?
あなたはそうしない。
PHP アプリケーションは持続しません。HTTP リクエストがあり、必要なことをすべて実行すると、レスポンスが送信され、アプリケーションが破棄されます。クラスのインスタンスUser
はすべて短命です。
リクエスト間で現在のユーザーを回復するには、識別子をセッションに保存します。セッション内のオブジェクト全体をダンプしないでください。代わりに、セッションからユーザーの識別子をフェッチした後、残りのユーザー アカウントの詳細を他の形式のストレージから復元できます (必要な場合)。
このプロセス全体は、モデル層からのある種の「認識サービス」または「認証サービス」によって実行および管理する必要があります。
ログイン/ログアウト ロジックを実行し、必要なアクションを実行するにはどうすればよいですか?
ログイン要求は、最初にコントローラーによって処理されます。
public function postLogin( $request )
{
$service = $this->serviceFactory->create('recognition');
$service->authenticate( $request->getParameter('username'),
$request->getParameter('password') );
}
サービスはユーザーの認証情報を検証しようとします。これにより、モデル レイヤーの状態が変更されます。次に、ビュー インスタンスはその状態を検索し、認証されたユーザーとしてランディング ページにリダイレクトするか、エラー メッセージを表示してログイン ページにリダイレクトします。
サービス自体は、ファクトリを介してモデル コントローラーとビューの間で共有されます。つまり、各サービスを一度だけ初期化してから再利用するだけです。次のようなもの:
class ServiceFactory
{
private $cache = array();
public function create( $name )
{
if ( array_key_exists($name, $this->cache) === false )
{
$this->cache[$name] = new $name;
}
return $this->cache[$name];
}
}
彼の例は非常に単純化されていることに注意してください。
さらに読むには、このリンク集を参照することをお勧めします。また、 this、this、thisの 3 つの投稿が役立つ場合もあります。