DuckPhp\Core\Route

简介

组件类 入口类 很重要的路由类,可以在单独抽出来使用。

选项

‘namespace’ => ‘LazyToChange’,

  1. 默认命名空间为 LazyToChange

‘namespace_controller’ => ‘Controller’,

  1. 默认子命名空间为 Controller
  2. 如果是 \ 开头的则忽略 namespace, 选项。

‘controller_base_class’ => null,

  1. 限定控制器基类,配合 namespace ,namespace_controller 选项。
  2. 如果是 \ 开头的则忽略 namespace, namespace_controller 选项。

‘controller_welcome_class’ => ‘Main’,

  1. 欢迎类
  2. 默认欢迎类是 Main

‘controller_hide_boot_class’ => false,

  1. 隐藏启动的类

‘controller_methtod_for_miss’ => ‘_missing’,

  1. 方法丢失调用的方法
  2. 如果有这个方法。找不到方法的时候,会进入这个方法
  3. 如果你使用了这个方法,将不会进入 404

‘controller_prefix_post’ => ‘do_‘,

  1. POST 的方法会在方法名前加前缀 do_
  2. 如果找不到方法名,调用默认方法名。

‘skip_fix_path_info’ => false,

  1. 修复默认没配置 PATH_INFO ,打开以节约性能

公开属性

公开方法

public function __construct()

  1. 空构造函数

public function init(array $options, object $context = null)

  1. 初始化

public static function RunQuickly(array $options=[], callable $after_init=null)

  1. 快速方法,等同于 init([])->run();

public function prepare($server)

  1. 绑定 $_SERVER 数组

public function bind($path_info, $request_method = ‘GET’)

  1. 绑定 PATH_INFO

public function run()

  1. 运行

public function forceFail()

  1. 强制为失败

public function addRouteHook($callback, $position, $once = true)

  1. 添加钩子

public function add404RouteHook($callback)

  1. 添加 404 回调,相当于addRouteHook($callback, 'append-outter', false);

public function defaulToggleRouteCallback($enable = true)

  1. 切换默认的路由回调

public function defaultRunRouteCallback($path_info = null)

  1. 运行默认的路由回调

public function defaultGetRouteCallback($path_info)

URL 相关

public static function URL($url=null)

  1. 获得 URL

public function _URL($url = null)

  1. URL 的实现函数

public function defaultURLHandler($url = null)

  1. 默认的 URL 函数,

public function setURLHandler($callback)

  1. 设置 URL 回调函数

public function getURLHandler()

  1. 获得 URL 回调函数

辅助信息方法

public function getPathInfo()

  1. 获得 PATH_INFO

public function setPathInfo($path_info)

  1. 设置 PATH_INFO

public function getParameters()

  1. 获得 数组

public function setParameters($parameters) public function getRouteCallingPath()

public function getRouteCallingClass()

  1. 获得当前路由调用的类名

public function getRouteCallingMethod() public function setRouteCallingMethod($calling_method)

  1. 设置当前路由
  2. //

public function dumpAllRouteHooksAsString()

  1. 简单 dump 所有钩子

public function replaceControllerSingelton($old_class,$new_class)

  1. 替换控制器的单例,配合 controller_use_singletonex 使用。不能直接使用 $old_class::G($new_class::G());

public static function Route()

  1. 返回单例,用于 DuckPhp/Route 双兼容 RouteHook;

详解

方法索引

内部方法

  1. 获得默认的路由回调

protected function beforeRun()

  1. 用于重写,在回调前执行

protected function getRunResult() 获得运行结果 protected function createControllerObject($full_class) 创建控制器对象 protected function getMethodToCall($object, $method)

  1. 获得回调方法
  2. protected function beforeRun()
  3. protected function getRunResult()
  4. protected function createControllerObject($full_class)
  5. protected function getMethodToCall($object, $method)
示例

这是一个单用 Route 组件的例子

  1. <?php
  2. use DuckPhp\Core\Route;
  3. require(__DIR__.'/vendor/autoload.php');
  4. class Main
  5. {
  6. public function index()
  7. {
  8. var_dump(DATE(DATE_ATOM));
  9. }
  10. public function i()
  11. {
  12. phpinfo();
  13. }
  14. }
  15. $options=[
  16. 'namespace_controller'=>'\\',
  17. ];
  18. $flag=Route::RunQuickly($options);
  19. if(!$flag){
  20. header(404);
  21. echo "404!";
  22. }
钩挂路由流程指南
  1. 如果你对默认的文件路由不满意,可以安插自己的钩子。
  2. $route->addRouteHook($callback, $append=true, $outter=true, $once=true);
  3. 其中, $callback 为你的钩子函数,符合 callback(string $path_info):bool
  4. 当你返回 true 的时候,表示成功。 将不再执行后面的函数。
  5. 一共有4个钩挂点可用。 $append,$outter
  6. defaultRunRouteCallback($path_info); 给做了默认榜样。
  7. defaultGetRouteCallback($path_info); 则是获得,但不处理调用。
  8. 如果你在前面的,想禁止默认路由函数,可以用 defaultToggleRouteCallback(false);
  9. add404Handle() 是默认用于后处理的版本。
URL 输出地址重写指南

Tip

bind() 函数和 bindServerData 区别 public function bind($path_info, $request_method = ‘GET’) 会进行 bindServerData 然后设置 提纯后的 path_info 和 request_method: