空操作
基于当前控制器,找不到操作方法,会自动定位到 _empty() 方法来进行同一的处理。不需要继承基类 \think\Controller,如下面的使用例子
控制器:
<?php
namespace 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 的控制器:
<?php
namespace 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控制器类进行操作。