|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。
曾几什么时候,咱们公司筹办开辟一套新的建站体系,决意将之前的框架给ko失落,从头开辟一套新的框架来顺应新的体系功效。向导们不但愿利用里面已有的框架,号称要开辟有本人特征的框架(不懂开辟的向导害逝世人)。因而咱们又投入到了新的开辟傍边。
因为咱们的体系撑持伪静态,之前的体系是直接利用办事器apache或iis自带的rewrite文件界说划定规矩,而框架中没有任何路由机制,因而此次框架筹办利用新的战略,由php完成路由机制。因而我入手下手了功效完成的探究之路。
开辟之前,我先懂得‘路由机制’要做甚么,它次要做两件事。
1.路由机制就是把某一个特定模式的url布局中提炼出来体系对应的参数。举个例子,如:http://www.cxybl.com/article/1 个中:/article/1 -> ?_m=article&id=1。
2.其次,是将具有对应参数的url转换成特定模式的url布局,是下面的进程的逆向进程。因为路由机制隔离了url布局和参数的转换关系,使的往后布局的变更不会影响上面代码的履行。
经由过程下面的懂得,可以得出要编写一个路由机制要一下几步:
1.编写办事器apache或iis自带的rewrite文件,将url布局导入index.php。
2.一个路由划定规矩设置装备摆设文件。
3.一个路由解析器,用来解析划定规矩,婚配和转换url。
因而,咱们逐一完成个中的每个局部。
1.rewrite文件编写,以apache为例:
<ifmodule mod_rewrite.c>
rewriteengine on
rewriterule ^index\.php$ - [l]
rewritecond %{request_filename} !-f
rewritecond %{request_filename} !-d
rewriterule (.+) index.php/$1 [l]
</ifmodule>
下面的代码就是将url布局导入index.php中,详细的rewrite细节就不赘述了。
2.在php中设置一个路由划定规矩设置装备摆设文件routes.php,我复杂的利用了一个hash数组编写划定规矩:
/**
*路由设置装备摆设文件编写申明:
* 路由设置装备摆设在一个array数组中,一笔记录代表一个划定规矩
* 个中数组key的数据代表婚配的途径格局:利用特定的字符串标识 如:'/{id}'
* 字符串中可以包括特定的变量,一切变量利用大括号{}包裹起来
* 数组value里是一个array数组,是对key中途径中变量停止特定处置
* 变量写在数组的key中,标准写在数组的value里,如:array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index')
* 标准分红两类:
* 1.格局判别:好比 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,个中'id'=>'/\d+/'就是一个格局判别,
* 暗示id变量只能是数字,格局判别前面只能利用正则表达式,因为php没有正则类,所以我指定 '/xxx/'和'#xxx#'格局的字符串为正则表达式
* 2.默许参数:好比 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,个中'_m'=>'frontpage'就是一个默许参数,
* 由于后面的途径没有_m和_a信息,所今后面会利用默许参数作为_m和_a的值
*
* 所以关于划定规矩'/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index')。我传入 /3 体系会转换成 index.php?_m=frontpage&_a=index&id=3
*
* 划定规矩婚配是依照$routes数组的按次一一婚配,一旦婚配上了就不往下婚配了。所以一些特定的婚配划定规矩要放在后面,通用的放在前面。
* 不然能够招致不履行特定的婚配划定规矩了
*/
$routes= array(
'/' => array('_m'=>'wp_frontpage','_a'=>'index'),
'/{id}'=> array('id'=>'/\d+/','_m'=>'wp_frontpage','_a'=>'index'),
'/{_m}/{_a}/{id}'=> array('id'=>'/\d+/'),
'/{_m}/{_a}'=> array()
);
3.路由机制中最庞杂也是最主要的一局部,就是解析器。
解析器有两个类构成(名字能够起的欠安)。
一个是route,作为全部解析器对外的接口,用于解析划定规矩,婚配和转换url,但是它只是一个代办署理,实践操作不是直接由它直接做的。
一个是routepattern,每一个routepattern实例对应划定规矩数组中的一笔记录,一个route实例包括多个routepattern,而route中的一切操作城市挪用外部一切routepattern实例操作,并停止整合。
class route
{
private static $instance = null;
private $routepatterns=array();
private function __construct()
{
$routes = array();
include root."/routes.php";
foreach($routes as $key=>$value){
$this->routepatterns[]=new routepattern($key,$value);
}
if(!isset($_server['path_info'])) return false;
$urlpath= $_server['path_info'];
$ismatch=$this->match_url($urlpath); 本文链接http://www.cxybl.com/html/wlbc/Php/20120607/28511.html如果你单纯是为了做网站赚钱,我想你还是别学php的好,去学ASP,JSP好了,毕竟它们有实力雄厚的公司去支持它们。 |
|