乐趣区

关于php:2022825-控制器中间件

控制器中间件

一、后期筹备

(一)定义路由

设置 RESTFul 申请的资源路由

Route::resource('mymiddle','MyMiddleware')->vars(['mymiddle'=>'name]']);

注:resource 前面跟着的 vars 办法是用于扭转其中的变量名,默认的变量名是 id

read 的办法为例:
默认路由:

Route::get('mymiddle/:id','MyMiddleware/read');

批改变量名后的路由:

Route::get('mymiddle/:name','MyMiddleware/read');
(二)生成控制器

应用命令:

php think make:controller MyMiddleware

批改代码如下:

<?php
declare (strict_types = 1);

namespace app\controller;

use think\Request;
use app\handlers\JsonResponseHandler;
use think\response\Json;

class MyMiddleware
{public function index()
    {$time = date('Y-m-d H:i:s',time());
        return JsonResponseHandler::succ('操作胜利',['greeting'=>'hello','time'=>$time]);
    }

    public function save(Request $request)
    {$params = $request->param();
        $name = $params['name'];
        return JsonResponseHandler::succ('name'.$name.'保留胜利');
    }

    public function read($name)
    {return JsonResponseHandler::succ('操作胜利',['name'=>$name]);
    }


    public function edit($name)
    {return JsonResponseHandler::succ('将 name 为'.$name.'的数据找进去,并显示到页面');
    }
    public function delete($name)
    {return JsonResponseHandler::succ('name'.$name.'曾经被删除');
    }
}

二、中间件

(一)生成中间件类

应用命令生成中间件:

php think make:middleware Check

批改中间件类,减少一个判断的逻辑,如果以后申请的 name 参数等于 think 的时候,就返回谬误的响应:

<?php
declare (strict_types = 1);

namespace app\middleware;

use app\handlers\JsonResponseHandler;

class Check
{
    /**
     * 解决申请
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {if($request->param('name') == 'think'){return JsonResponseHandler::error('name 不能为 think');
        }
        return $next($request);
    }
}
(二)定义中间件别名

在利用 config 目录下的 middleware.php 中先预约义中间件(其实就是减少别名标识):

<?php
// 中间件配置
return [
    // 别名或分组
    'alias'    => ['check' => app\middleware\Check::class,],
    // 优先级设置,此数组中的中间件会依照数组中的程序优先执行
    'priority' => [],];
(三)控制器中间件

MyMiddleware 控制器中定义 middleware 属性:

<?php
declare (strict_types = 1);

namespace app\controller;

use think\Request;
use app\handlers\JsonResponseHandler;
use think\response\Json;

class MyMiddleware
{
    // 定义 middleware 属性
    protected $middleware = ['check' => ['only'=>['save','read']]
    ];
    public function index()
    {$time = date('Y-m-d H:i:s',time());
        return JsonResponseHandler::succ('操作胜利',['greeting'=>'hello','time'=>$time]);
    }

    .
    .
    .
}

MyMiddleware 控制器新增的代码:

protected $middleware = ['check' => ['only'=>['save','read']]
];

only,只有。这段代码意为 check 中间件只拦挡 MyMiddleware 控制器的 saveread 办法。

与之对应的还有 except 关键字。except,除了,即除了指定的办法,其余的办法都会拦挡。

protected $middleware = ['check' => ['only'=>['save','read']]
];

这段代码意为 check 中间件除了 saveread 办法,其余办法都会拦挡。

(四)测试

先正文 middleware 属性:
测试 save 办法,save 办法的路由:

POST mymiddle

调用接口:

勾销 middleware 属性:
再次调用接口:

参考资料

  1. TP6 文档
退出移动版