zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ACM士兵排队
    ACM两个士兵打牌
    ACM平衡的括号
    ACM复合词
    ACM第二次比赛( C )
    ACM比赛(第二次A)
    ACM比赛(进制转换)
    ACM比赛(11462 Age Sort)
    ACM比赛
    hdu 1241 Oil Deposits(DFS求连通块)
  • 原文地址:https://www.cnblogs.com/XiaoG/p/1823605.html
Copyright © 2011-2022 走看看