URI
在CP中, 你可以为每个app指定URI风格, 包括后缀, 控制器方法之间的连接符等
生成URL
在CP中, 你可以在视图控制器或模板中使用$this->url()
来生成URL
1. 普通URL
生成普通的url方法如下:
$this->url('控制器:方法', array('参数名'=>'参数值'))
2. 参数加密URL
你还可以对参数进行加密
$this->sUrl('控制器:方法', array('参数名'=>'参数值'))
你可以在对应的控制器中调用
$this->sParams()
来解密参数
指定生成URL的风格
在CP中支持五种风格的URL, 你可以通过APP配置文件来指定生成URL的样式
'url' => array(
/**
* 默认调用的控制器和方法
*/
'*' => 'Main:index',
/**
* QUERY_STRING 方式
* 1 简短的url(不包含参数名,需要在方法注释中使用@cp_params key...来手动指定参数的名字)
* 生成的url类似 /?/controller/action/bar
* 3 友好的url形式 /?/controller/action/foo/bar...
* PATH_INFO 方式
* 2 原生的参数形式: /index.php/controller/action?foo=bar
* 4 友好的参数形式: /index.php/controller/action/foo/bar...
* 5 PATH_INFO 下的简短形式
*/
'type' => 3,
/**
* 服务器是否已经开启rewrite支持
*/
'rewrite' => false,
/**
* url请求中的连接字符(controller/action/params)之间的/
*/
'dot' => '/',
/**
* url后缀
*/
'ext' => '',
/**
* 索引文件名称
*/
'index' => 'index.php'
),
通过配置中的type
项, 你可以自定义生成URL的各种样式, 框架会根据配置自动更新生成的URL
用注释配置来还原参数名称
当type
的值为1
或5
的时候, 生成URL时会直接抛弃参数名称, 所以生成的URL更短, 此时我们需要在类对应的方法中使用注释配置来还原参数名称, 假设我们在模板中生成URL的调用如下:
$this->url('help:index', array('alias' => 'jobs'));
我们生成的RUL如下:
http://domain.com/help/index/jobs
此时help
控制器的index
方法定义如下:
namespace app\web\controllers;
class Help extends Web
{
/**
* 帮助中心
*
* @cp_params alias
* @throws \Cross\Exception\CoreException
*/
function index()
{
print_r($this->params['alias']);
}
}
我们在方法体的注释中使用@cp_params 参数名
来还原参数的名称, 在方法内部依然使用$this->params['alias']
来获取参数的值.
>注释配置中的参数名, 应该和生成URL时的参数名保持一致
关于注释配置的更多用法, 参考控制器/使用注释配置
一节