0

認証後、すべてのビューで使用するために、どこでいつ User オブジェクトをインスタンス化して渡すのですか?

私のロジックは、認証後new Userにコントローラーに を作成することです。Loginしかし、保護されたダッシュボード ページにリダイレクトされた後、すべてのビューでそのオブジェクトとそのデータを使用するにはどうすればよいでしょうか?

私は自分のAuthandSessionクラスで行ったように、静的メソッドを使用するのは好きではありません。これら 2 つの小さなクラスでは、静的メソッドを使用しても問題ありませんよね?

ログイン コントローラ:

class Login extends Controller {

    private $username;
    private $password;
    private $response;
    private $user;
    private $errors;

    public function __construct() {
        parent::__construct();
        $this->errors = array();
    }

    public function index() {
        $this->view->render('login/index');
    }

    public function submit() {
        $this->username = trim($_POST['username']);
        $this->password = trim($_POST['password']);

        try {
            if (!$this->isLoginValid())
                throw new Exception('invalid username or password');

            header('Location: '.URL_SSL.'dashboard');
        }
        catch (Exception $e) {
            $this->errors[] = $e->getMessage();
        }
    }

    private function isLoginValid() {
        $this->response = $this->model->submit($this->username);

        if ($this->response) {
            require APP.'lib/password_compat/password.php';

            $this->user = $this->response[0];

            if (password_verify($this->password, $this->user->password)) {
                $this->registerSessions();
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }
    }

    private function registerSessions() {
        Session::init();
        Session::set('loggedIn', true);
    }

}

ダッシュボード コントローラ:

class Dashboard extends Controller {

    public function __construct() {
        Auth::checkLogin();   // Checks the 'loggedIn' session
        parent::__construct();
    }

    public function index() {
        $this->view->setPageTitle('Dashboard');
        $this->view->render('dashboard/index');
    }

}
4

1 に答える 1

2

userIdセッションに保存し、どこでも使用してユーザー オブジェクトを作成できます。

そして、次のようなもの:

class Dashboard extends Controller {

public function __construct() {
    Auth::checkLogin();   // Checks the 'loggedIn' session
    parent::__construct();
}

public function index() {
    $this->view->setUserDataArra((array) \Path\To\User\Class::GetUserObjectbyId($_SESSION['userId']));
    $this->view->setPageTitle('Dashboard');
    $this->view->render('dashboard/index');
}
}

または、コントローラーで $userObj を定義し、ログイン後に入力することもできます。

于 2013-03-27T20:27:45.550 に答える