認証後、すべてのビューで使用するために、どこでいつ User オブジェクトをインスタンス化して渡すのですか?
私のロジックは、認証後new User
にコントローラーに を作成することです。Login
しかし、保護されたダッシュボード ページにリダイレクトされた後、すべてのビューでそのオブジェクトとそのデータを使用するにはどうすればよいでしょうか?
私は自分のAuth
andSession
クラスで行ったように、静的メソッドを使用するのは好きではありません。これら 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');
}
}