新建Base.php控制器,全部的頁面繼承自它
<?php
namespace app\index\controller;
use think\Controller;
class Base extends Controller
{
public function __construct(){
/**
* 不驗證用戶登錄的頁面
*/
//不驗證用戶登錄的頁面
$exception_arth_list=[
'member/users/login', //登錄頁面
'member/users/reg' //註冊頁面
];
$redirect_url='member/users/login';
$this->checkUserLogin($redirect_url,$exception_arth_list);
}
/**
* 檢查用戶是否登錄,登錄時跳轉到登錄頁面
* $redirect_url 要跳的url (不區別大小寫) [str] 例: 'member/Users/login'
* $exception_arth_list [array] 不驗證用戶登錄的頁面地址(不區別大小寫) 例: ['member/user/login','member/Users/reg']
* $msg 跳轉前的提示信息
*/
protected function checkUserLogin($redirect_url,$exception_arth_list=[],$msg='')
{
if(!is_string($redirect_url) || !is_array($exception_arth_list) || !is_string($msg) ){
die('傳入的參數錯誤.');
}
//獲取到當前訪問的頁面
$module=request()->module();//獲取當前訪問的模塊
$controller=request()->controller();//獲取當前訪問的控制器
$action= request()->action();//獲取當前訪問的方法
$current_auth_str=$module.'/'.$controller.'/'.$action; //轉成字符串
//不驗證用戶登錄的頁面
//把數組裏的所有轉小寫
if(!empty($exception_arth_list) && is_array($exception_arth_list)){
foreach($exception_arth_list as &$v){
if(!is_string($v)){
die('不驗證頁面數組裏的值只能爲字符串類型.');
}
$v=strtolower($v);
}
}
//當前訪問的頁面$current_auth_str轉爲全小寫後,若是不在$exception_arth_list客戶中就驗證用戶是否登錄
if(!empty($exception_arth_list) && is_array($exception_arth_list)){
if(!in_array(strtolower($current_auth_str),$exception_arth_list)){
if (!session('user_id')) {
if($msg == ''){
$this->redirect($redirect_url);
}else{
$this->error('請先登錄.', $redirect_url);
}
}
}
}
}
}