PHP框架开发:二、从何处开始?URL

注:草稿性质的文章,会不断进行修改完善,故请抱着怀疑的态度阅读

所谓万事开头难,我们的框架应该从何处开始“着笔”呢?

让我们来分析一下。。。

如果你做过Web开发,应该知道现在比较流行清晰明了的URL,如:http://www.loveqipai.com/home/register 即代表了注册页面的URL。

让我们分析一下这个URL,除去协议与主机部分剩下的就是 /home/register 了,如果你使用过任何一种MVC的框架,一定知道这里的home代表Controller的名称,register代表Action的名称。如果你不明白什么是MVC,对这个不明白也没关系,后面会有专门一章进行详解。

现在问题来了,我们知道,PHP做的网站默认情况下都是以.php/phtml/php* 为后辍的,而/home/register 这种URL是没有后辍的,如何实现这种URL呢?答案就是:URL Rewrite (URL重写)

URL Rewrite

在本教程中我们使用的是Apache 2.2的mod_rewrite组件 + .htaccess文件进行的,如何进行配置请参阅相关[Apache mod_rewrite]的文章,这里我们假设你已经配置好了apache,下面对.htaccess中的重写规则进行讲解。

关于IDE: 本教程使用的IDE为Netbeans 6.9 ,推荐你使用相同的IDE学习本教程,当然你可以使用任何你喜欢的IDE或文字处理软件。

请在你的IDE中创建一个PHP项目,并创建三个文件夹:application、library、public  (这里采用的类似ZF中的目录结构)

image

其中:application存放Controller、Model、View、Layout等等(后续章节后详细讲解各部分),library存放我们要开发的框架,public是网站的主目录,请将你的apache DocumentRoot指向此处。

点开public文件夹,创建一个index.php文件,一个.htaccess文件。.htaccess文件的内容很简单,就两行代码:

RewriteEngine On
RewriteRule !^.*?\.(jpg|jpeg|gif|png|css)$ index.php [NC]

解释一下,第二行代码是重写规则,意思是对于访问的URL如果不是以jpg、jpeg、gif、png或css一结尾,就都转发给index.php页面进行处理。

经过上面的处理,index.php就成了所有非资源文件的入口点了(如果想了解更多关于重写规则的内容请参考其文档)。

下面我们使用普通PHP页面制作的步骤来为index.php添加内容.

注:本教程试着把整个框架的实现过程告诉大家,所以会对代码进行不断的重构,你现在看到的不代表是最终框架中的,但这会加深你的理解,会让你明白日后为什么要修改。

 

一个PHP应用程序(一般是指网站)一般都有一个或多个配置文件,这里我们也同样需要。

  1. 在public下创建一个config文件夹,创建一个config.php文件,先不用写什么,备用;
  2. 在index.php中包含config.php文件:image

因为index.php是我们的入口文件,用户访问的URL都会传向index.php,那么我们就可以在index.php中分析URL,根据URL提供的参数合理调用其它代码,并把用户实际想得到的内容返回给用户。这里的合理调用也就是我们的框架要做的事情了,因此我们把它的代码写到框架所属的文件夹中。

注:因为本教程是我在制作一个网站时一边开发一边写的,框架的名称及“命名空间”也就用了网站域名的缩写LQP(loveqipai.com),你可以改成你希望使用的名称。

  1. 在library下建立文件夹: LQP,用于存放所有框架代码
  2. 创建我们框架中的第一个文件,命名为Rewrite.php,内容如下:
  3. <?php
    
    /**
    
     * Description of Rewrite
    
     *
    
     * @author z
    
     */
    
    class LQP_Rewrite
    
    {
    
        
    
    }
    是不是很简单?哈哈,说一下这个LQP_Rewrite类,我们使用LQP作为每个框架中类的前辍,指示其属于LQP框架,现在来给这个类加几个属性和构造器:
    <?php
    
    /**
    
     * Description of Rewrite
    
     *
    
     * @author z
    
     */
    
    class LQP_Rewrite
    
    {
    
        protected
    
                $_urlPath,
    
                $_controllerName,
    
                $_actionName;
        private function  __construct() {
    
            $this->_urlPath = $_SERVER['REQUEST_URI'];
    
            $params = explode('/', $this->_urlPath);
    
    
    
            if($params)
    
                $this->_controllerName = empty($params[1])?'home':$params[1];
    
            if(count($params) > 1)
    
                $this->_actionName = empty ($params[2])?'index':$params[2];
    
        }
    
    }
    $_urlPath 代表以/开始的地址,$_controllerName代表控制器的名称,$_actionName代表动作名称,构造函数中的代码为这几个属性赋予合适的值,其中控制器与动作的名称是由URL解析出来的,当值不存在或为空时默认值分别为home与index。
    上面的代码涉及到了控制器(Controller)与动作(Action)的概念,就到下节讲完MVC的相关知识再继续我们框架之旅吧。
    本节源码下载: http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%202.rar

你可能感兴趣的:(php框架)