Я следую шаблону объекта доступа к данным вместе с Factory (редактировать: извините, если я делаю ошибки noob).
Чтобы войти в систему, я сейчас делаю:
$user_dao = UserDaoFactory::getUserDaoFactory()->getUserDao();
$user = $user_dao->create($_POST['email'], $_POST['password']);
if ($user_dao->authenticate($user))
{
$user_dao->login($user); // sets $_SESSION['id']
}
Мой вопрос к последующим страницам.Учитывая, что пользователь в действительности вошел в систему, как мне создать и получить доступ к экземпляру их модели User?
Чтобы получить экземпляр вошедшего в систему пользователя, я должен сделать что-то вроде следующего?
Чтобы продолжить сеанс на следующей странице, следует ли мне попробовать следующее:
$user_dao = UserDaoFactory::getUserDaoFactory()->getUserDao();
$user = $user_dao->userFromSession($_SESSION['id']);
if ($user->isLoggedIn()) {
// success
}
Мне нужно было бы делать это каждый раз, когда мне нужно что-то узнать о вошедшем в систему пользователе.
Или попробовать этот другой подход?
Или мне следует абстрагироваться от «дать мне экземпляр зарегистрированной пользовательской модели» на что-то вроде фабрики пользователя?
Например,хранить экземпляр зарегистрированного пользователя в свойстве private static
класса User?
class User {
/* ... */
private static $_logged_in_user;
public static function setUserLoggedIn(User $user)
{
self::$_logged_in_user = $user;
}
public static function getLoggedInUser() {
if (!self::$_logged_in_user)
{
self::$_logged_in_user = new self;
}
return self::$_logged_in_user;
}
/* ... */
}
$user = User::getLoggedInUser();