空动作
空操作是指系统在找不到指定的操作方法的时候,会定位到空操作 a_empty
方法来执行,利用这个机制,可以实现错误页面和一些 URL 的优化。
例如,用空操作功能来实现一个城市切换的功能。
只需要给 City 控制器类定义一个 a_empty
方法:
namespace app\ctrl\index;
use ginkgo\Request;
class City {
public function a_empty() {
// 获取原始路由
$routeOrig = Request::instance()->routeOrig();
// 取得原始动作名
$name = $routeOrig['act']
// 把所有城市的动作解析到 showCity 方法
return $this->showCity($name);
}
// 注意 showCity 方法 本身是 protected 方法
protected function showCity($name) {
// 和 $name 这个城市相关的处理
return '当前城市:' . $name;
}
}
控制器的实际位置是
app/ctrl/index/city.ctrl.php
接下来,可以在浏览器里面输入
- http://server/index.php/index/city/beijing/
- http://server/index.php/index/city/shanghai/
- http://server/index.php/index/city/shenzhen/
由于 City 并没有定义 beijing、shanghai 或者 shenzhen 操作方法,因此系统会定位到空操作方法 a_empty 中去解析,a_empty 方法的参数就是当前 URL 里面的操作名,因此会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen