Yii组件机制之三:路由组件
urlManager
URL路由,是指通过分析
URL,
找出请求的控制器及动作。路由信息就是指控制器及动作组成的请求字符串,形如
controllerID/ActionID
。
Yii中的路由主要有两重作用:
1. 根据请求
URL
找到应对的控制器及其方法
2. 根据提供的参数及规则生成
URL
这就称为路由双向解析。
支持两种形式的URL
解析:
1.
普通的get
传递参数方式,如
index.php?r=controller/action¶m1=value1
2.
path模式(需要服务器支持),如
index.php/name1/value1/name2/value2
URL路由处理由
urlManager
组件
(
对应类名为
CUrlManager)
负责
,
它也是一个组件,故可以在配置文件中设置其属性:
$rules=array();
#url双向解析规则,这是最复杂的一项参数
$urlSuffix='';
#pathinfo 模式时的
url
后缀
$showScriptName=true;
#是否在
URL
中显示脚本文件名称,当设置为
false
时需要服务器支持
$appendParams=true;
#pathinfo模式下是否将参数追加到
URL
上,此项参数一般用于生成
URL
场景。设置为
true
时
,
参数将以斜线分隔并追加到路径后面。设为
false
时将以
query string
方式追加。
$routeVar='r';
#仅在
get
形式时有效,指定路由信息的变量名称
$caseSensitive=true;
#路由信息是否区分大小写。如果设置为
false,
请求路由信息将被转换成小写,所以
CWebApplication::controllerMap
、
CController::actions
、保存控制器的目录三者都应该使用小写。
$matchValue=false;
#仅在
get
形式时有效。当创建
URL
前
GET
参数的值应该匹配对应的子规则,这句话不好理解,后面会详细使用案例说明
$cacheID='cache';
#路由缓存所使用的组件名称(若使用缓存机制)
$useStrictParsing=false;
#仅在
path
形式时有效,设置是否使用严格的
URL
解析。如果设置为
true,
则任何请求的
url
必须匹配
$rules
指定的规则,否则会引发
404
错误。
$urlRuleClass='CUrlRule';
#url规则处理组件类……
通过setter
方法定义的属性:
Urlformat : 设置
url
形式,可以是
get, path
两种方式
get模式是服务器默认支持的形式,故不需要规则解析,直接通过
$_GET[$this->routeVar]
变量即可取得路由信息,相对而言
path
模式是比较消耗资源的(因为需要逐条解析规则),所以我觉得在对性能要求较高的应用中,可以考虑使用
http server
的地址重写代替
yii
的规则,从而减少
yii
中昂贵的规则分析性能代价。掌握了其规则的定义,才能从根本上熟练使用路由组件。
一个规则是由路由和匹配样式组成的,一般地,每条规则的键名为规则,值为应对的路由,均可以配置文件中指定或在运行时指定,以下是几个例子:
'post/<id:\d+>/<title:.*?>'=>'post/view'
表示匹配post/\d+/.*?
规则的请求的路由为
post/view,
且将设置两个
GET
变量,分别为
$_GET['id']
和
$_GET['title'],
指向对应的值。带尖括号的部分表示不仅要匹配而且要捕获值至变量中。
创建url
时,若指定路由为
post/view,
并提供
id, title(
可选
)
参数,则将生成
post/$id/$title
形式的
url
,如:
$app->urlManager->createUrl('post/view', array(
'id'=>23,
'title'=>'title_text',
'name1'=>'value1',
'name2'=>'value2'
));
将生成index.php/post/23/title_text?name1=value1&name2=value2
'posts/<tag:.*?>'=>'post/index'
匹配posts/.*?
的请求的路由将设置为
post/index,
同时将匹配的内容保存到
$_GET['tag']
变量中。创建
URL
时若指定路由信息为
post/index,
并提供了
tag
参数(可选),则将生成
posts/$tag
形式
URL
。
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>'
匹配 \w+/\w+
的请求
,
设置
$_GET['controller']
和
$_GET['action']
两个变量,并且路由信息中直接使用这两个变量的值作为路由信息。若指定
controller
及
action
两个参数,参将创建形如
controller/action
形式的
URL
。
了解这些,是我们使用urlManager
组件的关键。
分享到:
相关推荐
高级组件可能涉及如认证和授权机制、缓存管理、日志记录、邮件发送等复杂功能。开发者可以通过扩展基础组件来创建自己的高级组件,实现更定制化的业务需求。 【优化京东平台】:这个描述可能意味着项目的目标是针对...
数据库数据库支持有关使用表达式的一些增强功能,现在,您可以在\yii\db\QueryTrait::limit(),\yii\db\QueryTrait::offset()和\yii\data\Sort中使用它们。MSSQLMSSQL支持得到增强。首先,模式阅读性能显着提高...
Yii Framework PHP CodeSniffer编码标准(官方仓库) 您可以在此处阅读有关Yii标准的信息: : 如何安装安装PEAR: http://pear.php.net/manual/en/installation.getting.php 安装PHP_CodeSniffer: pear install ...
Yii2 jsTree 组件jsTree 是 jquery 插件,提供交互式树。 它是完全免费的、开源的,并在 MIT 许可下分发。 jsTree 易于扩展、主题化和可配置,它支持 HTML 和 JSON 数据源以及 AJAX 加载。 这个包允许你在几分钟内将...
yii-resque, 基于 php Resque的Yii组件,基于 Resque我是 php的一个组件,它基于 php-resque resque和 php-resque-scheduler的组件,我们还通过使用 ResqueBoard测试了日志处理程序 using 。需求php函数扩展。Red
Twitter Bootstrap 4 Yii 2... 它按照Yii小部件封装了组件和插件,因此在Yii应用程序中使用Bootstrap组件/插件非常容易。 有关许可证信息,请检查文件。 文档位于 。 安装 安装此扩展的首选方法是通过 。 无论运行 ...
基于 Yii 框架和标签的依赖机制验证缓存相关性,标签也存储在缓存中 基于 Косыгин Александр < > 在描述的想法 通过 Composer 安装 php composer.phar 需要 intersvyaz/yii-tags-dependency:* ...
本文实例讲述了Yii2框架控制器、路由、Url生成操作。分享给大家供大家参考,具体如下: 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰; 控制器ID ...
Yii2 设置组件 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist pendalf89/yii2-settings "*" 或添加 "pendalf89/yii2-settings": "*" 到composer.json文件的 require 部分...
在Yii2.0中,"标签组件"(Tag Cloud)是一种常见且实用的功能,它允许用户以云的形式展示和管理标签,通常用于博客、文章或其他内容管理系统中,以直观地显示和链接相关的主题或类别。"yii2tags组件"就是专门为Yii...
Yii 2 的 Elasticsearch 查询和 ActiveRecord 这个扩展为提供了集成。 它包括基本的查询/搜索支持,还实现了ActiveRecord模式,允许您在 Elasticsearch 中存储活动记录。 有关许可证信息,请检查文件。 文档位于 。...
Yii2全日历组件 安装 安装此扩展的首选方法是通过 。 要安装,请运行 $ php composer.phar require edofre/yii2-fullcalendar "V1.0.11" 或添加 "edofre/yii2-fullcalendar": "V1.0.11" 到composer.json文件的...
yii2-weuiWeUI for Yii 2为Yii2封装weui组件,让微信开发更简单本组件为车卡通微信会员管理系统而做,]]authorfufudaoanu-zhangnuowei000InstallationInstall With ComposerThe preferred way to install this ...
$curl = \Yii::$app->curl; $response = $curl->get('http://example.com'); ``` 对于POST请求,可以这样: ```php $data = ['key' => 'value']; $response = $curl->post('http://example.com', $data); ``` 4. *...
Yii2 Web和控制台组件,它是顶部的接口。 感谢所做的如此完整的工作。 如何使用? 使用Composer安装 只需在composer.json文件中的require对象下添加该行即可。 { " require " : { ... " udokmeci/yii2-beanstalk...
例如,urlManager组件负责处理网页请求路由到对应的控制器。 db组件提供数据库相关服务等等。 在同一个应用中,每个应用组件都有一个独一无二的 ID 用来区分其他应用组件, 你可以通过如下表达式访问应用组件。 \...
Twitter Yii 2的Bootstrap... 它根据Yii小部件封装了组件和插件,因此在Yii应用程序中使用Bootstrap组件/插件非常容易。 有关许可证信息,请检查文件。 文档位于 。 安装 安装此扩展的首选方法是通过 。 无论运行 ...
Yii 2资产捆绑包 此扩展为应用程序提供了与捆绑在一起的资产,并提供了使用图标的助手。 有关许可证信息,请检查文件。 代码状态 支持 丰盛版 字体超赞的版本 扩展版本 4. * 〜2.17 5. * 〜3.0 更新到3.2 在...
yii:Yii学习资料和新闻 :用Yii开发的项目案例,包括开源不开源的,包括Yii1和Yii2,至今有300多个案例了。 :forecho开的摘要小专栏,欢迎有需要的朋友订阅。 Docs文档 (每次github有提交时15分钟后自动更新比...
Yii <- Yii 2 桥 在遗留的 Yii 1 应用程序中使用 Yii 2 小部件。 要求 Yii 1.1.15 应用 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist "neam/yii-yii2-bridge" "*" 或...