[李景山php]每天TP5-20170117|thinkphp5-Url.php-2
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[李景山php]每天TP5-20170117|thinkphp5-Url.php-2相关的知识,希望对你有一定的参考价值。
// 检测域名 protected static function parseDomain(&$url, $domain) {// 根据 url 及传入的 域名进行解析 if (!$domain) {// 如果没有传入合适的数据,直接 返回 return ‘‘; } $request = Request::instance();// 请求实例化 if (true === $domain) {// 如果传入的域名为 true 则自动判定域名 // 自动判断域名 $domain = $request->host();// 获取域名 if (Config::get(‘url_domain_deploy‘)) {// 是否根域名 依赖 // 根域名 $urlDomainRoot = Config::get(‘url_domain_root‘);// 通过 配置文件 获取 跟域名 $domains = Route::rules(‘domain‘);// 路由寻找 域名规则 $route_domain = array_keys($domains);// 获取 跟 域名 对应的 路由规则 foreach ($route_domain as $domain_prefix) {// 遍历循环 此前的 根域名 if (0 === strpos($domain_prefix, ‘*.‘) && strpos($domain, ltrim($domain_prefix, ‘*.‘)) !== false) { // 能够进行 域名匹配 foreach ($domains as $key => $rule) {// 对路由规则进行遍历 $rule = is_array($rule) ? $rule[0] : $rule;// 如果 值 仍然是 数组,获取第一个元素 否则是 整个元素, // 弄这么复杂的配置项 弄啥嘞 if (is_string($rule) && false === strpos($key, ‘*‘) && 0 === strpos($url, $rule)) { $url = ltrim($url, $rule);// 当规则是个字符串,并且没有*号,并且是用rule 开头的 // 删掉 开头的 这个 规则匹配符号 $domain = $key;// 将相应的域名 赋值到 域名里面 修正自动获取的域名 // 生成对应子域名 if (!empty($urlDomainRoot)) {// 不为空,在去拼合 域名的 跟目录文件 $domain .= $urlDomainRoot; } break;//跳出 } else if (false !== strpos($key, ‘*‘)) {// 如果是* if (!empty($urlDomainRoot)) { $domain .= $urlDomainRoot;// 直接拼合 自动获取的域名 跟 跟目录 } break; } } } } } } elseif (!strpos($domain, ‘.‘)) {// 以. 开头,或者没有 . $rootDomain = Config::get(‘url_domain_root‘);// 获取根目录 if (empty($rootDomain)) {// 根域名 为空 $host = $request->host();// 请求 跟域名 $rootDomain = substr_count($host, ‘.‘) > 1 ? substr(strstr($host, ‘.‘), 1) : $host; } $domain .= ‘.‘ . $rootDomain; } return ($request->isSsl() ? ‘https://‘ : ‘http://‘) . $domain;// 不同的协议 }// 总结:不同的方式进行了不同的 域名生成 规则的判定 // 解析URL后缀 protected static function parseSuffix($suffix) {// 解析 URL 后缀 if ($suffix) {// 配置文件 $suffix = true === $suffix ? Config::get(‘url_html_suffix‘) : $suffix;// 如果传入的参数是 true if ($pos = strpos($suffix, ‘|‘)) {//如果有分割线,获取第一组数据,那要分割线还有什么用途呢??? $suffix = substr($suffix, 0, $pos); } }// 后缀 是否有 . 无所谓,做了处理 return (empty($suffix) || 0 === strpos($suffix, ‘.‘)) ? $suffix : ‘.‘ . $suffix; } // 匹配路由地址 public static function getRuleUrl($rule, &$vars = []) { foreach ($rule as $item) {// 遍历路由规则 list($url, $pattern, $domain) = $item;// 每个item 都会拥有这么多的选项 if (empty($pattern)) {// 如果父级为空,直接返回 return [$url, $domain]; } foreach ($pattern as $key => $val) {//对父级不为空的情况进行处理 if (isset($vars[$key])) {//如果对应的 配合变量 $url = str_replace([‘[:‘ . $key . ‘]‘, ‘<‘ . $key . ‘?>‘, ‘:‘ . $key . ‘‘, ‘<‘ . $key . ‘>‘], $vars[$key], $url); unset($vars[$key]); $result = [$url, $domain];// 返回 组合后的 url } elseif (2 == $val) { $url = str_replace([‘/[:‘ . $key . ‘]‘, ‘[:‘ . $key . ‘]‘, ‘<‘ . $key . ‘?>‘], ‘‘, $url); $result = [$url, $domain];// 返回另外一种组合的url } else { break; } } if (isset($result)) {// 如果有结果 返回结果 return $result; } } return false; }//匹配当前目录 // 指定当前生成URL地址的root public static function root($root) { self::$root = $root; Request::instance()->root($root); }// 获取根地址 }
本文出自 “专注php 群号:414194301” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1882895
以上是关于[李景山php]每天TP5-20170117|thinkphp5-Url.php-2的主要内容,如果未能解决你的问题,请参考以下文章
[李景山php]每天TP5-20161210|Config.php
[李景山php]每天laravel-20161027|FileLoader.php
[李景山php]每天laravel-20161028|Translator.php
[李景山php]每天laravel-20161107|PhpEngine.php