3

Zend\Authentication\AuthenticationService現在ログインしているユーザーを管理するために使用します。ここで、すべてのコントローラーアクションでユーザーオブジェクトを割り当てることなく、デフォルトですべてのViewModelでエンティティオブジェクトを使用できるようにします。

これを行うための良い方法はありますか?または、ViewModelsのファクトリを作成し、そこからユーザーのIDを挿入する必要がありますか?その場合、ViewModelを作成するたびにServiceManagerを使用する必要がありますが、これはあまりセクシーではありません。

もっとエレガントな方法はありますか?おそらく、ViewModel(つまりテンプレート)内からAuthenticationServiceに直接アクセスできますか?

4

3 に答える 3

4

OcramiusとBramの回答に触発されて、私はZFViewHelpersを詳しく調べました。そしてtadaa:実は、 ZF2には、任意のビューモデルのユーザーIDにアクセスするためのヘルパーがすでに付属しています。ビューヘルパーは単にと呼ばれidentityます。

Zend\Authentication\AuthenticationServiceただし、これを機能させるには、呼び出し可能なクラスのリストに追加する必要があります(手がかりはありません。これがデフォルトではない理由)。たとえば、 config / autoload/global.phpに追加します。

return array(
    'service_manager' => array(
        'invokables' => array(
            'Zend\Authentication\AuthenticationService' => 'Zend\Authentication\AuthenticationService',
        ),
    ),
);

その後、任意のテンプレートから現在のユーザーのIDに簡単にアクセスできます。

<p>Hello <?php echo $this->identity()->getName() ?></p>

私を正しい軌道に乗せてくれたOcramiusに特に感謝します!Zend \ Authentication \ AuthenticationServiceを使用しない場合でも、彼の答えは当てはまります。

于 2013-02-16T02:09:57.977 に答える
2

それがどのように行われるかを見てくださいZfcUser。すべてのビューに ID 変数を挿入する代わりに、ビュー ヘルパーが認証サービスにアクセスできるようにします。

そのために、認証サービスはサービス ファクトリを介してビュー ヘルパーに注入されます。

これにより、基本的に、任意のビュー スクリプトで次のようなものを使用できます。

echo $user = $this->zfcUserIdentity();

echo $user ? $user->getUsername() : 'Not logged in!';
于 2013-02-15T22:16:54.570 に答える
0

認証サービスからユーザー モデルを取得するビュー ヘルパーを作成する必要があります。例として、ZfcUserビュー ヘルパーを見てください。おそらく、ユースケースに ZfcUser モジュールを使用できます。

于 2013-02-15T22:15:48.223 に答える