空操作

基于当前控制器,找不到操作方法,会自动定位到 _empty() 方法来进行同一的处理。不需要继承基类 \think\Controller,如下面的使用例子

控制器:

  1. <?php
  2. namespace app\test\controller;
  3. class City
  4. {
  5. // 就是设置这个方法就好了
  6. public function _empty($name)
  7. {
  8. // 把所有城市的操作解析到city方法
  9. return $this->showCity($name);
  10. }
  11. // 注意 showCity方法 本身是 protected 方法
  12. protected function showCity($name)
  13. {
  14. // 和$name这个城市相关的处理
  15. return '当前城市:' . $name;
  16. }
  17. }

效果1:访问 tp5.1.com/test/city/beijing
image.png

效果2:访问 tp5.1.com/test/city/上海
image.png

效果3:访问 tp5.1.com/test/city/武汉
image.png


空控制器

基于当前模块,找不到控制器了,系统会自动定位 Error 控制器,使用这个机制同样可以解决很多问题。

先在 test 模块下简历这个 Error 的控制器:

  1. <?php
  2. namespace app\test\controller;
  3. use think\Request;
  4. class Error
  5. {
  6. public function index(Request $request)
  7. {
  8. // 获取控制器名称,并将控制器名称作为一个参数,传递给下面的方法 city
  9. $cityName = $request->controller();
  10. return $this->city($cityName);
  11. }
  12. // 注意 city方法 本身是 protected 方法
  13. protected function city($name)
  14. {
  15. // 和$name这个城市相关的处理
  16. return '当前城市' . $name;
  17. }
  18. }

在浏览器里面输入

  1. tp5.1.com/test/beijing/
  2. tp5.1.com/test/shanghai/
  3. tp5.1.com/test/shenzhen/

输出的结果依次是:

tp5.1.com/test/beijing/:
image.png

tp5.1.com/test/shanghai/:
image.png

tp5.1.com/test/shenzhen/:
image.png

空控制器和空操作还可以同时使用,用以完成更加复杂的操作。

空控制器Error是可以定义的:config\app.php line69

  1. <?php
  2. // 更改默认的空控制器名
  3. 'empty_controller' => 'MyError',

当找不到控制器的时候,就会定位到MyError控制器类进行操作。