空动作

空操作是指系统在找不到指定的操作方法的时候,会定位到空操作 a_empty 方法来执行,利用这个机制,可以实现错误页面和一些 URL 的优化。

例如,用空操作功能来实现一个城市切换的功能。

只需要给 City 控制器类定义一个 a_empty 方法:

  1. namespace app\ctrl\index;
  2. use ginkgo\Request;
  3. class City {
  4. public function a_empty() {
  5. // 获取原始路由
  6. $routeOrig = Request::instance()->routeOrig();
  7. // 取得原始动作名
  8. $name = $routeOrig['act']
  9. // 把所有城市的动作解析到 showCity 方法
  10. return $this->showCity($name);
  11. }
  12. // 注意 showCity 方法 本身是 protected 方法
  13. protected function showCity($name) {
  14. // 和 $name 这个城市相关的处理
  15. return '当前城市:' . $name;
  16. }
  17. }

控制器的实际位置是

app/ctrl/index/city.ctrl.php

接下来,可以在浏览器里面输入

由于 City 并没有定义 beijing、shanghai 或者 shenzhen 操作方法,因此系统会定位到空操作方法 a_empty 中去解析,a_empty 方法的参数就是当前 URL 里面的操作名,因此会看到依次输出的结果是:

  1. 当前城市:beijing
  2. 当前城市:shanghai
  3. 当前城市:shenzhen