`
月影无痕
  • 浏览: 1009589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Yii组件机制之三:路由组件urlManager

 
阅读更多

 

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 2.0进阶版 高级组件 优化京东平台

    高级组件可能涉及如认证和授权机制、缓存管理、日志记录、邮件发送等复杂功能。开发者可以通过扩展基础组件来创建自己的高级组件,实现更定制化的业务需求。 【优化京东平台】:这个描述可能意味着项目的目标是针对...

    Yii 2.0.13.1.zip

    数据库数据库支持有关使用表达式的一些增强功能,现在,您可以在\yii\db\QueryTrait::limit(),\yii\db\QueryTrait::offset()和\yii\data\Sort中使用它们。MSSQLMSSQL支持得到增强。首先,模式阅读性能显着提高...

    yii-coding-standard:Yii Framework PHP CodeSniffer编码标准

    Yii Framework PHP CodeSniffer编码标准(官方仓库) 您可以在此处阅读有关Yii标准的信息: : 如何安装安装PEAR: http://pear.php.net/manual/en/installation.getting.php 安装PHP_CodeSniffer: pear install ...

    yii2-jstree:Yii2 jsTree 组件

    Yii2 jsTree 组件jsTree 是 jquery 插件,提供交互式树。 它是完全免费的、开源的,并在 MIT 许可下分发。 jsTree 易于扩展、主题化和可配置,它支持 HTML 和 JSON 数据源以及 AJAX 加载。 这个包允许你在几分钟内将...

    yii-resque, 基于 php Resque的Yii组件,基于.zip

    yii-resque, 基于 php Resque的Yii组件,基于 Resque我是 php的一个组件,它基于 php-resque resque和 php-resque-scheduler的组件,我们还通过使用 ResqueBoard测试了日志处理程序 using 。需求php函数扩展。Red

    yii2-bootstrap4:Yii 2 Bootstrap 4扩展

    Twitter Bootstrap 4 Yii 2... 它按照Yii小部件封装了组件和插件,因此在Yii应用程序中使用Bootstrap组件/插件非常容易。 有关许可证信息,请检查文件。 文档位于 。 安装 安装此扩展的首选方法是通过 。 无论运行 ...

    yii-tags-dependency:基于Yii框架的Dependency机制验证缓存相关性

    基于 Yii 框架和标签的依赖机制验证缓存相关性,标签也存储在缓存中 基于 Косыгин Александр &lt; &gt; 在描述的想法 通过 Composer 安装 php composer.phar 需要 intersvyaz/yii-tags-dependency:* ...

    Yii2框架控制器、路由、Url生成操作示例

    本文实例讲述了Yii2框架控制器、路由、Url生成操作。分享给大家供大家参考,具体如下: 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰; 控制器ID ...

    yii2-settings:Yii2 设置组件

    Yii2 设置组件 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist pendalf89/yii2-settings "*" 或添加 "pendalf89/yii2-settings": "*" 到composer.json文件的 require 部分...

    yii2.0 标签组件

    在Yii2.0中,"标签组件"(Tag Cloud)是一种常见且实用的功能,它允许用户以云的形式展示和管理标签,通常用于博客、文章或其他内容管理系统中,以直观地显示和链接相关的主题或类别。"yii2tags组件"就是专门为Yii...

    yii2-elasticsearch:Yii 2 Elasticsearch 扩展

    Yii 2 的 Elasticsearch 查询和 ActiveRecord 这个扩展为提供了集成。 它包括基本的查询/搜索支持,还实现了ActiveRecord模式,允许您在 Elasticsearch 中存储活动记录。 有关许可证信息,请检查文件。 文档位于 。...

    yii2-fullcalendar:Yii 2组件,可轻松实现全日历集成

    Yii2全日历组件 安装 安装此扩展的首选方法是通过 。 要安装,请运行 $ php composer.phar require edofre/yii2-fullcalendar "V1.0.11" 或添加 "edofre/yii2-fullcalendar": "V1.0.11" 到composer.json文件的...

    yii2-weui:为yii2封装weui组件

    yii2-weuiWeUI for Yii 2为Yii2封装weui组件,让微信开发更简单本组件为车卡通微信会员管理系统而做,]]authorfufudaoanu-zhangnuowei000InstallationInstall With ComposerThe preferred way to install this ...

    yii2-curl:yii2框架的cURL包装器

    $curl = \Yii::$app-&gt;curl; $response = $curl-&gt;get('http://example.com'); ``` 对于POST请求,可以这样: ```php $data = ['key' =&gt; 'value']; $response = $curl-&gt;post('http://example.com', $data); ``` 4. *...

    yii2-beanstalk:Yii2 beantalk Web和控制台组件

    Yii2 Web和控制台组件,它是顶部的接口。 感谢所做的如此完整的工作。 如何使用? 使用Composer安装 只需在composer.json文件中的require对象下添加该行即可。 { " require " : { ... " udokmeci/yii2-beanstalk...

    Yii框架应用组件用法实例分析

    例如,urlManager组件负责处理网页请求路由到对应的控制器。 db组件提供数据库相关服务等等。 在同一个应用中,每个应用组件都有一个独一无二的 ID 用来区分其他应用组件, 你可以通过如下表达式访问应用组件。 \...

    yii2-bootstrap:Yii 2 Bootstrap 3扩展

    Twitter Yii 2的Bootstrap... 它根据Yii小部件封装了组件和插件,因此在Yii应用程序中使用Bootstrap组件/插件非常容易。 有关许可证信息,请检查文件。 文档位于 。 安装 安装此扩展的首选方法是通过 。 无论运行 ...

    yii2-fontawesome:具有Font Awesome的Yii2资产捆绑包:http:fortawesome.github.ioFont-Awesome

    Yii 2资产捆绑包 此扩展为应用程序提供了与捆绑在一起的资产,并提供了使用图标的助手。 有关许可证信息,请检查文件。 代码状态 支持 丰盛版 字体超赞的版本 扩展版本 4. * 〜2.17 5. * 〜3.0 更新到3.2 在...

    awesome-yii2:Yii2干货集

    yii:Yii学习资料和新闻 :用Yii开发的项目案例,包括开源不开源的,包括Yii1和Yii2,至今有300多个案例了。 :forecho开的摘要小专栏,欢迎有需要的朋友订阅。 Docs文档 (每次github有提交时15分钟后自动更新比...

    yii-yii2-bridge:在 Yii 1 应用程序中使用 Yii 2 小部件

    Yii &lt;- Yii 2 桥 在遗留的 Yii 1 应用程序中使用 Yii 2 小部件。 要求 Yii 1.1.15 应用 安装 安装此扩展的首选方法是通过 。 要么跑 php composer.phar require --prefer-dist "neam/yii-yii2-bridge" "*" 或...

Global site tag (gtag.js) - Google Analytics