0

簡単な質問があります。簡単なログイン システムを作成しています。ログインに成功した後、ユーザー情報をモデル クラスに割り当てたいと考えています。

モデル例

class user extends CI_Model {
    public $id=FALSE,$name,$role;

    public function __construct(){
        parent::__construct();

    //load user information
        if($this->session->userdata('user')){
            $u=$this->session->userdata('user');
            $this->id=$u->id;
            $this->role=$u->role;
            $this->name=$u->name;
        }

    }
    function login(){......}

しかし、これは私には正しく見えません!! その醜くて乾いていない..

だから私はマジック_セット、 _getを使用する必要がありますか? または、次のようなことができますか$this=$this->session->userdata('user');

私の目的は、このモデルがオートロードにあるため、単純な$id=$user->idまたは を使用して他のモデル/コントローラーからユーザー情報を取得できるようにしたいことですif($user->id)echo"hello".$user->name;

もしそうなら今。

    private $data;

    public function __construct(){
        parent::__construct();
        $this->data = (object) $this->session->userdata('user');
    }
    public function __get($name) {
    if(isset($this->data->$name)){
        return $this->data->$name;
        }
    }

これにより、「非オブジェクトでのメンバー関数 userdata() の呼び出し」というエラーが作成されます。

__get が $this->session をキャプチャするためだと思います。どうすればこれを修正できますか?!

4

1 に答える 1

1

なぜ単純に...

if($this->session->userdata('user')){
    $this->data = $this->session->userdata('user');
}

...そして、後でアクセスできます$user->data->id。また、ユーザー データにさらに属性を追加すると、このアプローチは将来的により柔軟になります。

于 2013-04-10T02:49:35.317 に答える