我认为我的Http类可能正在做它不应该做的工作

时间:2012-12-31 13:00:17

标签: php oop http model-view-controller

在我的MVC应用程序中有5种类型的用户:

guest, customer, deliver person, staff and admin

如果某个用户试图查看他们无权访问的页面,他们会被重定向到某个页面,其余的脚本将被终止。

例如,如果客户或送货人尝试查看他们无权访问的页面,则会将其重定向回http://www.mysite.com/members/,或者例如,如果访客尝试访问成员区域,则会将其重定向到登录页面。

我的Auth课程会进行检查,并且还负责登录过程。

$auth->login($username, $password)验证其调用的登录详细信息

$this->http->redirect()方法底部的

login()

public function redirect() {

    if($this->auth->isLoggedIn()) {

        switch($_SESSION['accountType']) {

            case 1:
            $url = $this->config->setting('url.members');
            break;

            case 2:
            $url = $this->config->setting('url.members');
            break;

            case 3:
            $url = $this->config->setting('url.staff');
            break;

            case 4:
            $url = $this->config->setting('url.admin');
            break;

        }

    }
    else {
        $url = $this->config->setting('url.base') . 'login';
    }

    $this->setHeader('Location', $url);

}

稍后会调用$http->respond()方法,该方法会发送任何添加的标题(例如上面添加的“位置”)。

我认为redirect()方法正在做它不应该做的工作,但我不确定。对我来说,似乎我的Http类不应该检查人们是否登录以及人们拥有什么类型的帐户,它应该只是添加标题并将响应发送回客户端等但是它似乎错误的是在redirect()类中也有Auth方法,因为它只应该处理授权。

任何想法都会非常感谢。

1 个答案:

答案 0 :(得分:0)

Auth类不应该确定您将被重定向到的链接,但是它应该提供Http类执行正确重定向所需的指示。这是您的方法的问题:您的Http类知道太多。现在,如果url本身是在Auth类中计算的,那么现在Auth类知道的太多了。主要的想法是使用带有参数的重定向方法,并且应该在调用者类中确定参数(无论是Auth还是其他)。