一:创建Url

Yii提供了一个助手方法yiihelpersUrl::to(),用来根据提供的路由和参数创建各种各样的URL,Url::to()方法调用的是UrlManager::createUrl()方法来创建Url

1:创建一个普通的路由Url

Url::to(['post/index']);
//等同于
Yii::$app->urlManager->createUrl(['post/index']);

2:创建一个带路由参数的路由Url

Url::to(['post/index', 'id' => 1]);
//等同于
Yii::$app->urlManager->createUrl(['post/index', 'id' => 1]);

3:创建一个带锚点的Url

Url::to(['post/index', '#' => 'content']);
//等同于
Yii::$app->urlManager->createUrl(['post/index', '#' => 'content']);

4:创建一个绝对路径Url:http://local.yii.com/index.ph...

Url::to(['post/index'], true);
//等同于
Yii::$app->urlManager->createAbsoluteUrl(['post/index'], true);

5:创建一个带https协议的绝对路径URL:https://local.yii.com/index.p...

Url::to(['post/index'], 'https');
//等同于
Yii::$app->urlManager->createAbsoluteUrl(['post/index'], 'https');

6:在Yii2.0.2版本开始,我们可以使用别名来定义别名路由

创建当前请求Url

Url::to([''])
//等同于
Yii::$app->urlManager->createUrl(['']);

创建设置别名的路由

Yii::setAlias('@post', 'post/index');
Url::to(['@post']);
//等同于
Yii::$app->urlManager->createUrl(['@post']);

7:在Yii中除了Url::to()方法,yiihelpersUrl 助手类同时提供了多个其它创建 URL 的方法

//创建主页URL
Url::home();
//创建根Url,如果程序部署到一个Web目录下的子目录时非常有用
Url::base()
//当前请求的权威规范URL
Url::canonical()
//记住当前请求的URL并在以后获取
//记住当前Url
Url::remember();
//获取记住的Url
Url::previous()

8:配置默认路由

在Yii中yiiwebApplication::$defaultRoute 属性所指定的缺省路由就是网页的首页,默认值为site/index,如果你想要修改默认路由地址,只需要修改配置中的defaultRoute 值

return [
    // ...
    'defaultRoute' => 'main/index',
];

9:全拦截路由

有时候你的系统需要伟华没这时候你可能想要所有的请求都显示相同的信息页,Yii中设置 yiiwebApplication::$catchAll 属性即可实现访问任何请求都显示相同的信息页

return [
    // ...
    'catchAll' => ['site/offline'],
];

二:美化Url

1:在Yii中如果你需要美化Url,这时候你需要在配置中配置urlManager组件

[
    'components' => [
        'urlManager' => [
              'class' => \yii\web\UrlManager::className(),
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => false,
            'suffix' => '',
            'rules' => [
                // ...
            ],
        ],
    ],
]

urlManager组件中常用到的个参数说明

class:urlManager组件使用到的class类

enablePrettyUrl:是否开启美化路由,默认为false,true为开启美化路由,false为不开启美化路由

showScriptName:是否显示脚本名称,默认为true,true为显示脚本名称,false为不显示脚本名称,此属性决定创建的URL中是否包含入口脚本名称,例如默认的/index.php/post/index.如果设置showScriptName为false,则创建成/post/index,这里注意,如果设置为false后访问不成功,在web目录下创建一个.htaccess文件,文件内容为

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php

enableStrictParsing:是否开启严格解析,默认为false,true为开启严格解析路由,false围殴不开启严格解析路由,如果设置为true开启严格解析是,请求的url必须严格匹配rules(规则)中设定的一条规则,否则系统将抛出 yiiwebNotFoundHttpException 异常,如果设置为false关闭严格解析,当rules(规则)中没有任何一条匹配时, 请求URL中的路径信息将被作为请求路由使用。

suffix:设置路由后缀,即路由结尾,默认为空(没有后缀),例如,如果此蚕食设置.html,这时候/post/index会设置为/post/index.html

rules:规则,此属性包含一个规则列表,用来规定如何解析和创建URL。 这是一个主要属性,你应该根据特定的应用环境配置此属性用来生成特定格式的URL,详细说明下面介绍

2:rules(规则)

一个Url规则是类yiiwebUrlRule 或子类的一个实例

(1):我们可以配置rules中键为匹配规则,值为路由,例:

'rules' => [
    'test' => 'post/test',
    'test/<id:\d+>' => 'post/test'
]

上面第一条规则匹配test映射到路由post/test,第二条规则匹配符合正则表达式 test/(d+) 的URL并映射到路由 post/test

根据上面,如果我们想要配置站点下所有的路由为/post/index/1这种形式

'rules' => [
    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
  '<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>',
  '<module:\w+>/<controller:\w+>/<action:\w+>'=>'<module>/<controller>/<action>',
]

(2):除了定义Url规则之外,我们还可以将规则定义为配置数组。 每个配置数组用来配置一个单独的 URL 规则对象

'rules' => [
    [
      'class' => \yii\web\UrlRule::className(),
      'pattern' => 'wj/<id:\d+>/<tag>',
      'route' => 'post/index',
      'suffix' => '',
      'defaults' => ['id' => 1, 'tag' => ''],
    ],
]

url规则常见个参数说明

class:url规则使用class类,默认为yiiwebUrlRule

pattern:路由规则

route:映射的路由

suffix:路由后缀,默认为空

defaults:路由规则中的参数默认值


huaweichenai
679 声望114 粉丝

引用和评论

0 条评论