ThinkPHP 5.1 中间件笔记
在用 ThinkPHP 写 API 的时候,在同一个模块下,有些方法(function)需要校验登录,有一些方法(function)不需要检验登录,然后我使用了“笨方法”,需要进行校验登录的方法(function)上都得写几行判断是否登录的,导致代码冗余,代码质量不高,今天仔细阅读了 ThinkPHP 5.1 开发文档,学习了一个新技能——中间件(https://www.kancloud.cn/manual/thinkphp5_1/564279)
在此记录下,因为对 ThinkPHP 框架 了解不够深入,难免有错误之处,请dalao指点更正????
创建中间件
Think PHP 5.1 关于中间件详细用法请查看官方文档:https://www.kancloud.cn/manual/thinkphp5_1/564279
方法一:
使用命令创建快捷创建(需要设置好 PHP 变量,你看不懂这个你看下一个方法吧):
php think make:middleware Auth
不出意外,会返回如下提示:
E:\PhpStorm_Project\x.nowtime.cc>php think make:middleware Auth Middleware created successfully.
然后就会在
application/http/middleware
路径下创建一个Auth.php
文件
方法二:
手动创建 application/http/middleware/Auth.php
文件
编写代码
编辑 application/http/middleware/Auth.php
文件,编写业务逻辑:
<?php
namespace app\http\middleware;
class Auth
{
public function handle($request, \Closure $next)
{
//如果没有 s 这个 Cookie
if(!isset($_COOKIE['s'])){
return redirect('/login');//则发送 http code 302,跳转到 /login,然后不会再往下执行代码
}
//以上代码只是一个简便的校验方法,具体你需要配合你业务逻辑判断
return $next($request);//此行不能删除,具体原因请访问:https://www.kancloud.cn/manual/thinkphp5_1/564279 查看
}
}
案例一:
假设有
application/api/controller/Query.php
文件,
假设方法update
、post
不需要校验登录,
而list
、log
方法需要校验登录,我们则可以这样写
```php
<?php
/**
- Created by PhpStorm.
- User: NowTime
- Date: 2019/5/8
- Time: 12:22
*/
namespace app\api\controller;
use think\Controller;
class Index extends Controller
{
//除了 update 和 update 方法不使用中间件 Auth 校验,其他都需要
protected $middleware = [
‘Auth’ => [
‘except’ => [
‘update’,
‘post’
]
]
];
public function update()
{
return '这是 index 方法';
}
public function post()
{
return '这是 post 方法';
}
public function list()
{
return '这是 list 方法';
}
public function log()
{
return '这是 log 方法';
}
}
## 案例二:
> 假设有 `application/api/controller/Query.php` 文件,
> 假设仅方法 `log` 需要校验登录,而其它方法不需要校验登录,我们则可以这样写
```php
<?php
/**
* Created by PhpStorm.
* User: NowTime
* Date: 2019/5/8
* Time: 12:22
*/
namespace app\admin\controller;
use think\Controller;
class Index extends Controller
{
protected $middleware = [
'Auth' => [
'only' => [
'log'
]
],//仅 log 方法使用中间件 Auth 校验,其他都需要
];
public function update()
{
return '这是 index 方法';
}
public function post()
{
return '这是 post 方法';
}
public function list()
{
return '这是 list 方法';
}
public function log()
{
return '这是 log 方法';
}
}