Home  >  Article  >  Backend Development  >  CakePHP中Router的机制跟使用方法

CakePHP中Router的机制跟使用方法

WBOY
WBOYOriginal
2016-06-13 13:04:41976browse

CakePHP中Router的机制和使用方法

一、典型CakePHP处理 Request 的流程


?? ? ?当人浏览网站,发出请求,.htaccess文件将request映射到webroot/index.php文件,此文件中主要处理:1.常量的定义;2.包含bootstrap.php文件;3.调用 dispather() 函数。

?

二、认识 Router 与 Dispatcher、Controller 之间的关系

?? ? ?(1). 路由(Router)从URL中解释并提取出这次请求的参数:控制器(controller)、动作(action)以及其他在这次请求中关联影响到得业务逻辑的所有其他参数信息;

?? ? ?(2).使用路由后,请求的URL被映射到一个控制器的动作中(在特定的一个控制器类得一个方法)


?? **** 部分函数解析 ****

?? 1. Router::parse($url)

?? ? ? 根据提供的url,解析出对应的controller、action、params 的数组。所依据的准则:默认路由、新定义创建的路由规则。

?

?

?? 2. Router::getArgs($args, $options = array()) 将passed params 转换为参数

?

三、CakePHP 中Router 配置

?? ? CakePHP 源码包中 router.php 文件:



??自定义路由:

connect() 函数的三个参数:1. 你希望匹配的URL值;2. 自定义的路由元素的默认值;3. 帮助该路由器匹配的URL元素的正则规则。

基本格式用于Router定义:

?

Router::connect(
    'URL',
    array('paramName' => 'defaultValue'),
    array('paramName' => 'matchingRegex')
);

?

?

??注:

(1) 定义URL类型。URL通常由斜杠分割的,但是也会包含一些通配符(*)或者自定义路由元素(URL元素以冒号为前缀) 用通配符来匹配URL的类型。特殊化的路由元素允许你为你的控制器actions收集参数。

(2) 当请求出现时,这些路由元素的值会在控制器的 <span style="font-size: 12.0pt;">$this->params</span> 存在。这不同于命名参数 (named parameter),所以注意区别:命名参数 (/controller/action/name:value) 存在于 <span style="font-size: 12.0pt;">$this->passedArgs</span> 中,而自定义路由元素存在于 <span style="font-size: 12.0pt;">$this->params</span>

?(3) 默认路由:/:controller、 /:controller/:action/*

?

?? ?这样的配置会返回什么呢???

?? ?写两个例子看一下:


?

四、 CakePHP 中Router 的应用

??(1). 简单应用:


??(2). 高级应用:




?? ? ?SlugRoute的解析方法很简单。首先我们调用父类parse()函数,可得到解析正则表达式的路径。任何空的或false的返回都会导致我们解析路径失败(路径不匹配),只有当我们得到有效的路径(对于post带有匹配的参数).自从CakeRoute:parse()将已经创造了参数,所以我们不需要修改参数,返回他们如果没有目标存在或返回错误。

?? ? ?<span style="font-size: 12.0pt;">app/config/routes.php</span><span style="font-size: 12.0pt;">中</span>引用此router类:

?

五、 CakePHP 中Router 配置文件的弊端

?? ? ? CakePHP的缺省实现中,我们并不用去设置Route,系统会遵循/controller/action/param的形式去解析URL。但是很多时候这样的URL并不友好,于是我们就要设置自定义的Route,其结果就是Route配置文件不断膨胀。值得注意的是PHP对于每个请求都要重建运行环境,而对于一次请求而言,Route配置文件里最后使用的只是一条配置而已,为了这一条配置,却不得不重复解析整个庞大的Route配置文件,无疑是个巨大的负担。

?? ? ? REST风格是解决这个问题的好办法,采用REST风格的架构方式,资源的URL形式相对确定,操作方式由HTTP方法而定,因此Route配置文件会迅速瘦身。



?? ? ??REST软件架构是一个抽象的概念,是一种为了实现这一互联网的超媒体分布式系统的行动指南。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是HTTP协议。通常我们把REST也写作为REST/HTTP,在实际中往往把REST理解为基于HTTPREST软件架构,或者更进一步把RESTHTTP看作为等同的概念。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn