为了配合所使用的 URL 模式,我们需要能够动态的根据当前的 URL 设置生成对应的 URL 地址,为此,QueryPHP 内置提供了 Q::url 方法,用于 URL 的动态生成,可以确保项目在移植过程中不受环境的影响。
Q::url 方法的定义规则如下(方括号内参数根据实际应用决定):
~~~
Q::url('[应用://]控制器/方法?参数1=值1',额外参数,扩展参数);
~~~
如果不定义应用和控制器的话 就表示当前应用和控制器名称,下面是一些简单的例子:
~~~
# /index.php/myapp/hello/world/id/5/name/yes.html
\Q::url( 'myapp://hello/world' ,['id'=>5,'name'=>'yes']);
# /index.php/myapp/index/test.html
echo \Q::url( 'myapp://test');
~~~
# 自定义 url
系统支持路由设置,像路由这种可以我们通过自定义 url 来生成地址。
~~~
# /hello-world.html
\Q::url('/hello-world');
# /new-5-tom.html
\Q::url('/new-{id}-{name}', ['id' => 5, 'name' => 'tom']);
~~~
# 强制使用普通 url 模式
在有些业务场景,无论系统设置什么样的 url 模式都生成普通的 url 地址。
~~~
# /index.php?app=home&c=hello&a=world
\Q::url ( 'hello/world', [ ], [
'normal' => true
] );
~~~
# 是否包含后缀
系统默认开启后缀,如果存在则会在尾部加入,默认后缀为 url_html_suffix
~~~
'url_html_suffix' => '.html'
~~~
我们可以通过 suffix 参数来关闭后缀,或者自定义后缀。
~~~
# /index.php/hello/world
echo \Q::url ( 'hello/world', [ ], [
'suffix' => false
] );
# /index.php/hello/world.jsp
echo \Q::url ( 'hello/world', [ ], [
'suffix' => '.jsp'
] );
~~~
# 泛域名支持
如果你的系统有着复杂二级域名,那么可以通过这样子实现。
~~~
'url_router_domain_top' => 'queryphp.cn'
'url_make_subdomain_on' => true
~~~
例子:
~~~
# http://www.queryphp.cn/index.php/hello/world.html
\Q::url ( 'hello/world' );
# http://vip.queryphp.cn/index.php/hello/world.html
\Q::url ( 'hello/world', [ ], [
'subdomain' => 'vip'
] );
# http://defu.vip.queryphp.cn/index.php/hello/world.html
\Q::url ( 'hello/world', [ ], [
'subdomain' => 'defu.vip'
] );
# http://queryphp.cn/index.php/hello/world.html
\Q::url ( 'hello/world', [ ], [
'subdomain' => '*'
] );
~~~
> 说明:大家可以综合运用本文的提到的功能以满足你的项目需求。
- 关于 QueryPHP
- 获取 QueryPHP
- 环境要求
- 许可协议 Free
- 执行流程 MVC
- 命名规范 $sName
- 目录结构 DIR
- 单一入口 index.php
- 响应客户端请求 URL
- 命名空间与自动载入 Autoload
- 路由
- 路由导入
- 批量导入
- 参数正则
- 分组定义
- 路由绑定
- 路由域名
- 分层控制器
- 默认和初始化APP
- 默认控制器和方法
- url 模式
- url 生成
- url 伪静态
- url 重写
- url 重定向
- 控制器绑定
- 方法器分层
- 控制器 __init
- 控制器方法交互
- 模板引擎语法
- C变量输出 $sName
- C变量支持函数和方法 $sName|trim
- C快捷输出 ~
- C标签简化 Css & Javascript
- C默认值 eq 三元运算符
- C变量运算符 +-
- 变量递增递减 ++--
- C循环数据 list
- N变量赋值 assign
- N循环数据 list
- N循环数据高级版 lists
- C循环数据 while
- N循环数据 while
- C循环数据 for
- N循环数据 for
- C条件判断 if
- N条件判断 if
- 标签嵌套无限层级
- N循环流程 break & continue
- N使用 PHP 代码
- N包含子模板 include
- J模板引擎 intro
- J条件判断 if
- J循环数据 each
- J变量 & 表达式
- J变量支持函数和方法 hello|test
- J默认值 eq 三元运算符
- J框架前端组件 jquery.queryphp.js
- J前端 CSS 规范
- J前端 JS 规范
- 保护标签自身 tagself
- 数据库
- 数据库配置
- 执行原生 sql 语句
- 数据库事务
- 数据库构造器 prefix
- 数据库构造器 table
- 数据库构造器 forceIndex
- 数据库构造器 where
- 数据库构造器 bind
- 数据库构造器 join
- 数据库构造器 union
- 数据库构造器 orderBy
- 数据库构造器 groupBy
- 数据库构造器 having
- 数据库构造器 distinct
- 数据库构造器 aggregate
- 数据库构造器 limit
- 数据库构造器 forUpdate
- 数据库构造器 columns
- 数据库构造器 reset
- 数据库集合查询
- 数据库查询数据 get
- 数据库查询多条数据 getAll
- 数据库查询单条数据 getOne
- 数据库查询聚合查询 aggregate
- 数据库写入数据 insert
- 数据库写入数据 insertAll
- 配置
- 配置格式
- 惯性配置
- 配置文件
- 读取配置
- 设置配置
- 删除配置
- 日志
- 日志配置参数
- 日志路径
- 日志过滤器
- 日志处理器
- 缓存
- 缓存配置参数
- 缓存路径
- 缓存指定时间
- COOKIE
- COOKIE 配置参数
- 开发调试
- 页面 trace