Yii路由(Route)

所谓路由是指URL中用于标识用于处理用户请求的module, controller, action的部分, 一般情况下由 r查询参数来指定。 如http://www.digpage.com/index.php?r=post/view&id=100, 表示这个请求将由PostController 的 actionView来处理。

同时,Yii也提供了一种美化URL的功能,使得上面的URL可以用一个比较整洁、美观的形式表现出来, 如 http://www.digpage.com/post/view/100。 这个功能的实现是依赖于一个称为urlManager 的应用组件。

使用 urlManager 开发者可以解析用户的请求,并指派相应的module, controller和action来进行处理, 还可以根据预义的路由规则,生成需要的URL返回给用户使用。 简而言之,urlManger具有解析请求以便确定指派谁来处理请求根据路由规则生成URL 2个功能。

美化URL

一般情况下,Yii应用生成和接受形如 http://www.digpage.com/index.php?r=post/view&id=100 的URL。这个URL分成几个部分:

  • 表示主机信息的 http://www.digapge.com
  • 表示入口脚本的 index.php
  • 表示路由的r=post/view
  • 表示普通查询参数的id=100

Web Server会将所有的请求都是交由入口脚本进行处理。 也就是说,Web Server应当视所有的URL为请求 index.php 脚本。这样我们对Web Server进行相应配置就行了。即然这样,URL中有没有指定 index.php 已经不重要了,反正都是请求的它。 在URL里面假惺惺地留个 index.php ,实在是画蛇添足。 因此,Yii允许我们不在URL中出现入口脚本 index.php 。
对于查询参数 id=100而言,这个URL请求的是编号为100的一个POST, 并执行view操作。那么我们可以再进一步改成 http://www.digpage.com/post/view/100。这个编号100跟前面的字母们放一起显得另类呀,要是都是字母的就更好了。 那我们假如所请求的编号100的文章,其标题为 Route , 那么不妨使用用 http://www.digpage.com/post/view/Route来访问。这样的话,干脆再加上 .html 好了。 变成 http://www.digpage.com/post/view/Route.html, 这样的URL对比原来,堪称完美了吧?
我们把 URL http://www.digpage.comindex.php?r=post/view&id=100变成http://www.digpage.com/post/view/Route.html的过程就称为URL美化。
Yii有专门的 yii\web\UrlManager 来进行处理,其中:

  • 隐藏入口脚本可以通过 yii\web\UrlManager::showScriptName = false 来实现
  • 路由的路径化可以通过 yii\web\UrlManager::enablePrettyUrl = true 来实现
  • 参数的路径化可以通过路由规则来实现
  • 假后缀(fake suffix) .html 可以通过 yii\web\UrlManager::suffix = ‘.html’ 来实现

路由规则

所谓孤掌难鸣,urlManager要发挥功能靠单打独斗是不行的,还要有另外一个的东东来配合。 这就是我们本篇要重点讲的:路由规则。
路由规则是指 urlManager 用于解析请求或生成URL的规则。 一个路由规则必须实现yii\web\UrlRuleInterface 接口,这个接口定义了两个方法:

  • 用于解析请求的 yii\web\UrlRuleInterface::parseRequest()
  • 用于生成URL的 yii\web\UrlRuleInterface::createUrl()

Yii中,使用 yii\web\UrlRule 来表示路由规则,一般这个类是足够开发者使用的。 但是,如果开发者想自己实现解析请求或生成URL的逻辑,可以以这个类为基类进行派生, 并重载 parseRuquest()createUrl()

猜你喜欢

转载自blog.csdn.net/weixin_36228538/article/details/83716857