ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 杂项 [TOC] ### 设置匹配模式 在通过调用方法的方式注册路由后,方法的返回值是当前对象。所以,这样可以进行链式操作。 有一个方法where();用来设置单独设置匹配模式,不过由于在注册是可以直接设置所以没什么大用 示例: `Route::any('/a-{aid}','index/index/index')->where(['id'=>'(\d+)']);` ### 可选参数 在写路由匹配模式是通过{params}来确定一个参数,也可以通过`{params?}`表示这是一个可选参数 例如: `Route::any('/a-{aid}-{aid?}','index/index/index')->where(['id'=>'(\d+)']);` 后面的那一个参数有没有都可以。 ### 路由命名 可以对当前路由进行命名,不过仅仅当次请求有效,不推荐使用 `Route::any('/a-{aid}','index/index/index')->name('read_article');` ### 隐式传参数 如果当前路由匹配成功后不在继续匹配那么可以使用隐私传参 `Route::any('/a-{aid}','index/index/index?rel=baidu.com&time=32322323');` ### 获取动态参数 `Route::any('/a-{aid}','index/index/index?rel=baidu.com&aid={:1}');` 通过`{:i}`的方式来获取动态参数如果不存在默认为空,顺序从1开始 ### 改变pathinfo 有时候我们想要修改pathinfo,在后面追加一些东西 可以使用`{$ext}`的方式来获取一些server的东西 `Route::any('/a-{aid}','index/index/index.{$ext});` 在规则匹配后会自动替换 #### 可选变量列表 ~~~ $v['{$pathinfo}'] = $this->option['pathinfo']; $v['{$http_host}'] = $this->option['http_host']; $v['{$request_scheme}'] = $this->option['request_scheme']; $v['{$script_name}'] = $this->option['script_name']; $v['{$request_uri}'] = $this->option['request_uri']; $v['{$path_info}'] = $this->option['path_info']; $v['{$request_method}'] = $this->option['request_method']; $v['{$query_string}'] = $this->option['query_string']; $v['{$http_referer}'] = $this->option['http_referer']; $v['{$ext}'] = $this->option['ext']; $v['{$server_name}'] = $this->option['server_name']; $v['{$request_time}'] = $this->option['request_time']; ~~~ ## 保存规则 在正常情况下路由的规则全部是缓存起来的,那么我们要更改一个规则就非常麻烦。 所以,路由组件提供了响应的方法来进行规则的增加删除和修改。 ### 删除规则 ~~~ /** * 删除一条正则规则 * @param [type] $key [规则名称] * @param string $method [请求方法] * @return [type] [description] */ public function deleteRule($key, $method = 'get') ~~~ ### 删除一个静态路由 ~~~ /** * 删除一个静态路由 * @param [type] $key [匹配地址] * @return [type] [description] */ public function deleteMap($key) ~~~ ### 删除一个域名路由 ~~~ /** * 删除一个域名路由 * @param [type] $key [域名] * @return [type] [description] */ public function deleteDomain($key) ~~~ ### 添加一个不需要解析的正则路由 该方法没有解析地址而是直接通过合并的方式添加到路由规则里 ~~~ /** * 添加解析好的正则规则 * @param array $rules [规则] * @param string $method [请求方法] */ public function addRules(array $rules, $method = 'any') ~~~ ### 保存 在一系列的操作之后并没有保存到文件,需要调用保存方法 ~~~ /** * 保存当前规则到缓存 * @return [type] [description] */ public function save() ~~~ ### 获取正则路由规则的引用 ~~~ /** * 返回规则引用 * @return [type] [description] */ public function &getRulesQuote() ~~~ ### 路由选项可以参数列表 #### 后缀检查 ~~~ /** * 后缀检查 可以多个后缀用|隔开 * @param [type] $op [description] * @return [type] [description] */ private function ext($op) ~~~ #### 禁止后缀 ~~~ /** * [deny_ext 禁止后缀 检查 多个后缀用|隔开] * @param [type] $op [description] * @return [type] [description] */ private function deny_ext($op) ~~~ #### 请求方法检查 ~~~ /** * 方法检查 可以多种方法使用 |分割 * @param [type] $op [description] * @return [type] [description] */ private function method($op) ~~~ #### 是否是https ~~~ /** * 是否是https * @param [type] $op [description] * @return [type] [description] */ private function https($op) ~~~ #### 检查http_host域名 ~~~ /** * 检查http_host域名 多个用|隔开 * @param [type] $op [description] * @return [type] [description] */ private function isDomain($op) ~~~ #### pajx检查 ~~~ // 是否是pajx 如果为true表示必须是这个来源如果$op为false表示不能是这个来源 private function pjax($op) ~~~ #### 来源检查 ~~~ /** * 来源域名 * @param [type] $op [description] * ['www.baidu.com',1] 存在第二个参数视为 不能是这个来源 * @return [type] [description] */ private function referer(array $op) ~~~ #### 端口检查 ~~~ /** * 端口 * @param [type] $op [description] * [80,1] 存在第二个参数视为 不是这个端口 * @return [type] [description] */ private function port(array $op) ~~~ #### 路由前缀 ~~~ /** * 路由前缀和 别名路由相同 * @param array $op [第一个参数是前缀,如果存在第二个表示不能是这个前缀] * @return [type] [description] */ private function prefix($op = []) ~~~ #### 检查是否存在一些参数 ~~~ /** * 检查是否存在某些参数 * @param array $op [description] * @return [type] [description] */ private function param(array $op = []) ~~~ #### 自定义回调函数 ~~~ /** * 自定义回调 * @param [type] $op [回调函数 调用时会传入当前对象] * @return function [description] */ private function callback($op) ~~~