注:草稿性质的文章,会不断进行修改完善,故请抱着怀疑的态度阅读
所谓万事开头难,我们的框架应该从何处开始“着笔”呢?
让我们来分析一下。。。
如果你做过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中的目录结构)
其中: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应用程序(一般是指网站)一般都有一个或多个配置文件,这里我们也同样需要。
因为index.php是我们的入口文件,用户访问的URL都会传向index.php,那么我们就可以在index.php中分析URL,根据URL提供的参数合理调用其它代码,并把用户实际想得到的内容返回给用户。这里的合理调用也就是我们的框架要做的事情了,因此我们把它的代码写到框架所属的文件夹中。
注:因为本教程是我在制作一个网站时一边开发一边写的,框架的名称及“命名空间”也就用了网站域名的缩写LQP(loveqipai.com),你可以改成你希望使用的名称。
<?php /** * Description of Rewrite * * @author z */ class LQP_Rewrite { }
<?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]; } }