📜  Yii-URL规则(1)

📅  最后修改于: 2023-12-03 14:48:40.798000             🧑  作者: Mango

Yii URL规则

在Yii中,URL规则用于将URL转换为控制器和操作。它们还可以用于将URL中的参数提取为GET或POST参数或将它们合并到控制器和操作参数中。

基本概念

在Yii中,URL规则由一个名为CUrlRule的类表示。在使用之前,我们需要将它们添加到一个名为urlManager的应用程序组件中。UrlManager是一个从URL到路由的映射器,它还提供了许多其他的URL管理功能。

URL规则由以下两个基本部分组成:

  1. pattern:表示带有可选占位符的URL模式。
  2. route:表示对应的控制器和操作路径。
创建一个基本URL规则

通过以下代码片段,我们可以创建一个基本的URL规则。

array(
  'class' => 'CUrlRule',
  'pattern' => 'post/<id:\d+>',
  'route' => 'post/view',
),

解释:

  • 通过数组传递调用CUrlRule()构造函数。
  • pattern是URL模式,其中id:\d+是可选的占位符。
  • route是控制器和操作路径,其中'post/view'是控制器名和操作名的组合。
匹配URL规则

在上面的示例中,我们通过设置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模式中设置自定义变量。