登录页面怎么配合Base公共控制器

浏览:58 发布日期:2018/08/09 分类:求助交流
class Base extends Controller
{
    /**
     * initialize  创建常量,公共方法,初始化方法
     */
    protected function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub\

        self::isLogin();
    }
    //检测登录
    protected function isLogin(){
        if (!Session::has('kt_user_id')){
            $this->redirect('user/login');
        }
    }
}
index控制器class Index extends Base
{
    public function index()
    {
        $this->view->assign('title','会员中心首页');
        $this->view->assign('pageTitle','主面板');
        return $this->view->fetch();
    }
    //显示会员登录界面
    public function login()
    {
        return $this->view->fetch();
    }
    //会员登录
    public function checklogin(){
        if(!Request::isPost()){
            return json(KTReturn('请求错误!'));
        }
        $res = User::checkLogin();
        return json($res);
    }
}
有个公共控制器,里面初始化方法就开始检测会员是否登录了,这个index控制器继承了base,里面有login登录界面,还有一个用户登录处理方法checklogin,如果打开执行,肯定永远都登录不了。这两个都是会员没登录的时候用的。不能检测是否登录。

怎么能让这个检测登录的 self::isLogin();在这两个方法里面失效,跳过他。
我不想每个方法里面都手动写isLogin判断一下是否登录。所以写在公共控制器里面了。

我想到一个办法,是这个index控制器不继承base,直接继承Controller,这样就不用检测了。但是另外一个问题又出现了。index控制器默认是显示会员中心,那没登录的人,也能进会员中心。有点尴尬了,这种怎么破呢!

还有一个办法是,把这个登录,验证登录,单独写到一个叫login的控制器里面,这个控制器就干这两个事。

如果这样的话,url就变成了:index.php/index/login/login.html

这种url有点不好看啊,应该是变成这样才好。 index.php/login.html,最终通过url重写那个组件,把index.php去掉,形成最终的登录地址,是 www.xx.com/login,或者login.html,这种合理。

这种办法又出现url的问题,始终要带着 login/login.html.这种怎么破。

ps。。。。。。。。。。。。。

百度了一通,貌似找到了一个方案。class Base extends Controller
{
    public function _initialize(){
        $no_check = array("login","login_check");
        $request = \think\Request::instance();
        echo $request->controller();
        echo $request->module();
        echo $request->action();
    }
}
他这个看样子就是要跳过不需要验证session的页面。只给出一丢丢,没写完。

ps......................................

自己修改了一下。 protected function initialize()
{
        $no_check = array("login","checklogin");
        $request = Request::instance();
        if (!in_array($request->action(),$no_check)){
            self::isLogin();
        }
 }
在当前控制器,凡是有包含指定的方法名的操作,都不需要进行登录验证了。一会儿,实测一下。
最佳答案
评论( 相关
后面还有条评论,点击查看>>