📅  最后修改于: 2023-12-03 14:48:40.798000             🧑  作者: Mango
在Yii中,URL规则用于将URL转换为控制器和操作。它们还可以用于将URL中的参数提取为GET或POST参数或将它们合并到控制器和操作参数中。
在Yii中,URL规则由一个名为CUrlRule的类表示。在使用之前,我们需要将它们添加到一个名为urlManager的应用程序组件中。UrlManager是一个从URL到路由的映射器,它还提供了许多其他的URL管理功能。
URL规则由以下两个基本部分组成:
通过以下代码片段,我们可以创建一个基本的URL规则。
array(
'class' => 'CUrlRule',
'pattern' => 'post/<id:\d+>',
'route' => 'post/view',
),
解释:
在上面的示例中,我们通过设置URL模式来匹配URL规则。一旦URL匹配了模式,它就会使用路由。这是一个示例:
// 创建一个UrlManager实例
$urlManager = Yii::app()->urlManager;
// 解析一个URL
$url = $urlManager->parseUrl('post/100');
// 输出:array('post/view', array('id' => 100))
echo CVarDumper::dumpAsString($url);
这样,我们就可以看到匹配到的控制器和操作名称以及属性。在这个例子中,我们没有设置固定的字符串,而是使用可选的占位符来处理动态请求。
在URL模式中,我们可以使用正则表达式作为占位符的一部分。例如,如果我们希望ID为数字,则我们可以使用\d+。这是一个示例:
array(
'class' => 'CUrlRule',
'pattern' => 'post/<id:\d+>/<title:[^/]+>',
'route' => 'post/view',
),
在这个URL规则中,我们使用了两个占位符:id和title。其中,id表示数字,title表示除了斜杠之外的任何字符。
当我们有多个URL规则时,我们需要用REWRITE规则来匹配它们。这是一个示例:
$rules = array(
array(
'class' => 'CUrlRule',
'pattern' => 'post/<id:\d+>',
'route' => 'post/view',
),
array(
'class' => 'CUrlRule',
'pattern' => 'post/<year:\d{4}>/<month:\d{2}>',
'route' => 'post/archive',
),
);
// 添加URL规则
$urlManager->addRules($rules, false);
// 解析URL
$url = $urlManager->parseUrl('post/2015/12');
这里我们首先定义了两个URL规则。我们可以通过调用addRules()函数将其添加到UrlManager中,而第二个参数表示将其添加为重写规则。
在Yii中,URL规则为我们提供了一种将URL转换为控制器和操作的方法。它们还可以用于将URL中的参数提取为GET或POST参数或将它们合并到控制器和操作参数中。我们可以使用正则表达式来进行模式匹配,以便在URL模式中设置自定义变量。