请问thinkphp 怎么在每个方法里面判断是否登录?
本文介绍了请问thinkphp 怎么在每个方法里面判断是否登录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
[tp版本3.2.3]
我在Controller里面写了一个公共类CommonController.class.php
,写了一个构造方法来判断是否登录,没登录就重定向到登陆页:
<?php
namespace Admin\Controller;
use Think\Controller;
class CommonController extends Controller
{
public function __construct()
{
$isLogin = session('islogin');
if (!$isLogin) {
$this->redirect('Login/index');
return;
} else {
session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新,因为可能出现登录了后过期的情况。
}
}
}
这样做有一个问题,就是没有登录的时候始终会重定向。报错127.0.0.1 将您重定向的次数过多。
于是我改成了
class CommonController extends Controller
{
public function isLogin()
{
$isLogin = session('islogin');
if (!$isLogin) {
$this->redirect('Login/index');
return;
} else {
session('islogin', $isLogin); // 如果登录刷新一下?不知道是不是这样去刷新
}
}
}
接着在其它继承CommonController的文件每一个都去加一个构造函数,如ArticleController.class.php
<?php
namespace Admin\Controller;
use Think\Controller;
class ArticleController extends CommonController
{
function __construct()
{
parent::isLogin(); // 这样写会报错,不知道为什么,报错提示如下
}
public function dolist()
{
$this->show("hallo world");
}
}
报错提示:
Call to a member function display() on null
错误位置
FILE: X:\domainX\ThinkPHP\Library\Think\Controller.class.php LINE: 69
最后这样写才不报错:
<?php
namespace Admin\Controller;
use Think\Controller;
class ArticleController extends CommonController
{
public function dolist()
{
parent::isLogin(); // 这样写
$this->show("hallo world");
}
}
问题:
为什么继承CommonController.class.php的类也不能再__construct里面判断呢?
继承CommonController.class.php的类如果都要判断是否登录,就需要在每一个方法里面写
parent::isLogin();
,这样做合理吗?还是说这样做本来就是合理的?
解决方案
public function _initialize() {
$allow_actions = explode(',',C('ALLOW_ACTIONS')); //配置哪些操作无需登录即可访问,比如登录,验证登录
$curr_action = MODULE_NAME . '.' . CONTROLLER_NAME . '.' . ACTION_NAME;
if(!in_array($curr_action,$allow_actions) && !is_login_admin()) { //未登录且是需要登录后访问的
$this->redirect('Admin/Public/login');
}
}
这篇关于请问thinkphp 怎么在每个方法里面判断是否登录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文