【发布时间】:2012-01-02 08:44:59
【问题描述】:
我正在遵循数据访问对象模式以及工厂(编辑:抱歉,如果我犯了菜鸟错误)。
要登录用户,我目前这样做:
$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_dao = UserDaoFactory::getUserDaoFactory()->getUserDao();
$user = $user_dao->userFromSession($_SESSION['id']);
if ($user->isLoggedIn()) {
// success
}
我必须在每个需要了解当前登录用户的地方都这样做。
或者试试这个其他的方法?
或者我应该将“给我一个登录用户模型的实例”抽象为用户工厂之类的东西吗?
例如,将登录用户的实例存储在用户类的private static 属性中?
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();
【问题讨论】:
标签: php design-patterns dao factory-pattern