空操作
基于当前控制器,找不到操作方法,会自动定位到 _empty() 方法来进行同一的处理。不需要继承基类 \think\Controller,如下面的使用例子
控制器:
<?phpnamespace app\test\controller;class City{// 就是设置这个方法就好了public function _empty($name){// 把所有城市的操作解析到city方法return $this->showCity($name);}// 注意 showCity方法 本身是 protected 方法protected function showCity($name){// 和$name这个城市相关的处理return '当前城市:' . $name;}}
效果1:访问 tp5.1.com/test/city/beijing
效果2:访问 tp5.1.com/test/city/上海
效果3:访问 tp5.1.com/test/city/武汉
空控制器
基于当前模块,找不到控制器了,系统会自动定位 Error 控制器,使用这个机制同样可以解决很多问题。
先在 test 模块下简历这个 Error 的控制器:
<?phpnamespace app\test\controller;use think\Request;class Error{public function index(Request $request){// 获取控制器名称,并将控制器名称作为一个参数,传递给下面的方法 city$cityName = $request->controller();return $this->city($cityName);}// 注意 city方法 本身是 protected 方法protected function city($name){// 和$name这个城市相关的处理return '当前城市' . $name;}}
在浏览器里面输入
tp5.1.com/test/beijing/tp5.1.com/test/shanghai/tp5.1.com/test/shenzhen/
输出的结果依次是:
tp5.1.com/test/beijing/:
tp5.1.com/test/shanghai/:
tp5.1.com/test/shenzhen/:
空控制器和空操作还可以同时使用,用以完成更加复杂的操作。
空控制器Error是可以定义的:config\app.php line69
<?php// 更改默认的空控制器名'empty_controller' => 'MyError',
当找不到控制器的时候,就会定位到MyError控制器类进行操作。
