在用 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 文件,
假设方法 updatepost 不需要校验登录,
listlog 方法需要校验登录,我们则可以这样写
```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 方法';
    }
}

标签: PHP, ThinkPHP

添加新评论