加载中...

控制器中间件


控制器中间件

V5.1.17+版本开始,支持为控制器定义中间件。首先你的控制器需要继承系统的think\Controller类,然后在控制器中定义middleware属性,例如:

  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. class Index extends Controller
  5. {
  6. protected $middleware = ['Auth'];
  7. public function index()
  8. {
  9. return 'index';
  10. }
  11. public function hello()
  12. {
  13. return 'hello';
  14. }
  15. }

当执行index控制器的时候就会调用Auth中间件,一样支持使用完整的命名空间定义。

如果需要设置控制器中间的生效操作,可以如下定义:

  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. class Index extends Controller
  5. {
  6. protected $middleware = [
  7. 'Auth' => ['except' => ['hello'] ],
  8. 'Hello' => ['only' => ['hello'] ],
  9. ];
  10. public function index()
  11. {
  12. return 'index';
  13. }
  14. public function hello()
  15. {
  16. return 'hello';
  17. }
  18. }

控制器传参

可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如

  1. <?php
  2. namespace app\http\middleware;
  3. class Hello
  4. {
  5. public function handle($request, \Closure $next)
  6. {
  7. $request->hello = 'ThinkPHP';
  8. return $next($request);
  9. }
  10. }

注意,传递的变量名称不要和param变量有冲突。

然后在控制器的方法里面可以直接使用

  1. public function index(Request $request)
  2. {
  3. return $request->hello; // ThinkPHP
  4. }

还没有评论.