一:建立Urlphp
Yii提供了一个助手方法yiihelpersUrl::to(),用来根据提供的路由和参数建立各类各样的URL,Url::to()方法调用的是UrlManager::createUrl()方法来建立Urlhtml
1:建立一个普通的路由Urlweb
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...app
Url::to(['post/index'], true); //等同于 Yii::$app->urlManager->createAbsoluteUrl(['post/index'], true);
5:建立一个带https协议的绝对路径URL:https://local.yii.com/index.p...yii
Url::to(['post/index'], 'https'); //等同于 Yii::$app->urlManager->createAbsoluteUrl(['post/index'], 'https');
6:在Yii2.0.2版本开始,咱们能够使用别名来定义别名路由post
建立当前请求Urlurl
Url::to(['']) //等同于 Yii::$app->urlManager->createUrl(['']);
建立设置别名的路由code
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:路由规则中的参数默认值