think\Route::check PHP Method

check() public static method

检测URL路由
public static check ( think\Request $request, string $url, string $depr = '/', boolean $checkDomain = false ) : false | array
$request think\Request Request请求对象
$url string URL地址
$depr string URL分隔符
$checkDomain boolean 是否检测域名规则
return false | array
    public static function check($request, $url, $depr = '/', $checkDomain = false)
    {
        // 分隔符替换 确保路由定义使用统一的分隔符
        $url = str_replace($depr, '|', $url);
        if (strpos($url, '|') && isset(self::$rules['alias'][strstr($url, '|', true)])) {
            // 检测路由别名
            $result = self::checkRouteAlias($request, $url, $depr);
            if (false !== $result) {
                return $result;
            }
        }
        $method = $request->method();
        // 获取当前请求类型的路由规则
        $rules = self::$rules[$method];
        // 检测域名部署
        if ($checkDomain) {
            self::checkDomain($request, $rules, $method);
        }
        // 检测URL绑定
        $return = self::checkUrlBind($url, $rules, $depr);
        if (false !== $return) {
            return $return;
        }
        if ('|' != $url) {
            $url = rtrim($url, '|');
        }
        if (isset($rules[$url])) {
            // 静态路由规则检测
            $rule = $rules[$url];
            if (true === $rule) {
                $rule = self::getRouteExpress($url);
            }
            if (!empty($rule['route']) && self::checkOption($rule['option'], $request)) {
                return self::parseRule($url, $rule['route'], $url, $rule['option']);
            }
        }
        // 路由规则检测
        if (!empty($rules)) {
            return self::checkRoute($request, $rules, $url, $depr);
        }
        return false;
    }

Usage Example

Example #1
0
 public function testBind()
 {
     $request = Request::instance();
     Route::bind('index/blog');
     Route::get('index/blog/:id', 'index/blog/read');
     $result = Route::check($request, '10');
     $this->assertEquals(['index', 'blog', 'read'], $result['module']);
     Route::bind('\\app\\index\\controller', 'namespace');
     $this->assertEquals(['type' => 'method', 'method' => ['\\app\\index\\controller\\blog', 'read']], Route::check($request, 'blog/read'));
     Route::bind('\\app\\index\\controller\\blog', 'class');
     $this->assertEquals(['type' => 'method', 'method' => ['\\app\\index\\controller\\blog', 'read']], Route::check($request, 'read'));
 }
All Usage Examples Of think\Route::check