0

免責事項: Yii の完全な初心者、php の経験あり。
Yiiで、loginCWebUserのメソッドをオーバーライドしてもいいですか?
私がこれをしたい理由は、ソースコードのコメントが子changeIdentityクラスによってメソッドをオーバーライドできると述べていたからですが、このメソッドにもっと多くのパラメーターを送りたいので、login(CWebUser の) メソッドもオーバーライドすることを考えていました。
また、それがあまり良い考えではない場合は、追加のパラメーターをchangeIdentityメソッドに送信する方法を教えてください (何らかの方法で引数から取得することによって$states??)。追加のパラメーターは、UserIdentity クラスの新しく定義されたプロパティです。

4

1 に答える 1

1

components/UserIdentity.phpの認証メソッドをオーバーライドして、最初にやりたいことを実行することをお勧めします。実際、デフォルトのデモおよび管理者ログインよりも高度なセキュリティ システムを実装するには、それが必要です。

その方法では、使用できます

$this->setState('myVar', 5);

次に、次のように Web アプリの任意の場所にアクセスします。

Yii::app()->user->getState('myVar');

が定義されていない場合myVar、そのメソッドはnullデフォルトで戻ります。それ以外の場合は、保存されていたものは何でも返されます。私の例では 5 です。これらの値は $_SESSION 変数に保存されるため、セッションが続く限り保持されます。

更新: さて、この混乱全体が Yii でどのように機能するかを学ぶために時間を費やしたので、ここでも調査結果を共有しています。以下は、私が他の場所で与えた同様の回答からほとんどコピーして貼り付けたものです。これは、システムのページからページへと機能し、持続することがテストされています。

必要な結果を得るには、CWebUser クラスを拡張する必要があります。

class WebUser extends CWebUser{
    protected $_myVar = 'myvar_default';

    public function getMyVar(){
        $myVar = Yii::app()->user->getState('myVar');
        return (null!==$myVar)?$myVar:$this->_myVar;
    }

    public function setMyVar($value){
        Yii::app()->user->setState('myVar', $value);
    }
}

myVarその後、を使用してアトリビュートを割り当て、呼び出すことができますYii::app()->user->myVar

上記のクラスをcomponents/WebUser.php、またはロードまたはオートロードされる任意の場所に配置します。

新しい WebUser クラスを使用するように構成ファイルを変更すると、すべての設定が完了します。

'components'=>
    'user'=>array(
        'class'=>'WebUser',
    ),
...
),
于 2012-12-01T19:35:41.170 に答える