zl程序教程

您现在的位置是:首页 >  其他

当前栏目

TP6.0 基础控制器登录流 v0.0.1

基础 登录 控制器 TP6.0
2023-06-13 09:16:39 时间

1. 定义公共基础控制器

定义应用的公共控制器 Base.php

<?php
declare(strict_types=1);
namespace app\admin\controller;
use app\BaseController;
/**
* admin 应用基础控制器
*/
class Base extends BaseController
{
// 初始化
protected function initialize()
{
$this->prefix = 'aiaad';
$this->home = '/admin/index';
$this->login = '/admin/login';
}
/**
* 检测是否登录
*
* @return bool true 已登录 false 未登录
*/
protected function checkLogin()
{
return session('?' . $this->prefix);
}
// +-----------------------------------------------------------
// | 登录、退出
// +-----------------------------------------------------------
/**
* 登录成功
*/
protected function sign($data)
{
session($this->prefix, $data);
$this->homePage();
}
/**
* 退出登录
*/
protected function logout()
{
session($this->prefix, null);
$this->loginPage();
}
// +-----------------------------------------------------------
// | 重定向
// +-----------------------------------------------------------
/**
* 重定向到登陆页
*/
protected function loginPage()
{
$this->redirect($this->login);
}
/**
* 重定向到后台主页
*/
protected function homePage()
{
$this->redirect($this->home);
}
/**
* 解决基初始化方法中无法重定向问题
*
* @param ...$args redirect助手函数参数
*/
private function redirect(...$args)
{
throw new \think\exception\HttpResponseException(redirect(...$args));
}
}

2. 定义用于校验登录状态控制器 Auth.php (未登录重定向到登陆页)

<?php
declare(strict_types=1);
namespace app\Admin\controller;
/**
* 基础控制器处理登陆状态校验
*
* 需要校验登陆状态的控制器继承当前控制器即可
*/
class Auth extends Base
{
// 初始化
protected function initialize()
{
// 调用父类初始化方法
parent::initialize();
// 未登录跳转到登陆页面
$this->checkLogin() || $this->loginPage();
}
}

3. 登录相关方法, 已登录访问控制器方法重定向到后台主页

<?php
declare(strict_types=1);
namespace app\admin\controller;
/**
* 处理登录相关方法
*/
class Login extends Base
{
/**
* 初始化方法
*
* 已经登录再访问登陆页面重定向到后台主页
*/
protected function initialize()
{
// 调用父类初始化方法
parent::initialize();
// 已经登录访问登录页重定向到后台主页
$this->checkLogin() && $this->homePage();
}
/**
* 登录接口
*/
public function index()
{
// ... 登录逻辑
// 登录成功后重定向到后台主页
$data = ['id' => mt_rand(1, 999), 'name' => '张三'];
$this->sign($data);
}
}