0

guestsで処理する一般的に推奨される方法は何だろうと思っていYii2ます。

たとえば、ログインしているユーザーがいる場合、次のような呼び出しで簡単に詳細を取得できます。

$user = Yii::$app->user->identity;

次に、利用可能にした詳細に応じて、以下のようなことを行うことができます。

$user->username;
$user->email;

ただし、guest Yii::$app->user->identity返品がある場合は明らかnullです。

私の状況では、ユーザーがゲストかログインユーザーかを常に確認する必要があるため、さまざまな場所で次のようなコードを繰り返す必要があります。

if (Yii::$app->user->isGuest) {
    $username = Yii::t('general', 'Guest');
} else {
    $username = Yii::$app->user->identity->username;
}

...これをいたるところで行うのは明らかに保守性が低いため、チェックを実行せずにユーザー名を参照できるソリューションを考え出そうとしていますが、明らかに、必要な場所でゲストチェックを行いますセキュリティ上の目的ですが、私は保守可能なコードを書こうとしているので、ユーザー名などの情報が必要なだけの目的でソリューションを考え出そうとしています.

でこれを行うための推奨される方法が現在あるかどうかはわかりませんがYii2、おそらくyii\web\Userクラスを拡張して以下のようなことをするようなことを考えました:

public function getIdentity() {

    $identity = parent::getIdentity();

    if (empty($identity)) {
        $identity = new stdClass();
        $identity->username = Yii::t('general', 'Guest');
    }

    return $identity;

}

それは私が望むものを達成するための賢明な方法ですか、それともより良い方法がありますか?

4

1 に答える 1

3

User を拡張することは良い考えですが、ID/ゲストのデフォルト データを返す getUsername() や getAttributes() などの新しいメソッドをそこに追加することをお勧めします。あなたの方法は、「getIdentity」のnull/not null戻りに基づくユーザーの「getIsGuest」メソッドを破壊します。そして、このメソッドは不可欠であり、その応答を変更すると、アプリ内の他の多くのものを壊す可能性があると私は信じています.

アップデート。config->components->user->class で拡張 User クラスを設定できます。

[
    'components' => [
        'user' => [
            'class' => 'my\namespace\User'
        ]
    ]
]
于 2015-06-20T12:31:14.477 に答える