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中的目录结构)

其中: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文件:

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

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

  1. 在library下建立文件夹: LQP,用于存放所有框架代码
  2. 创建我们框架中的第一个文件,命名为Rewrite.php,内容如下:
<?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。

  1. 上面的代码涉及到了控制器(Controller)与动作(Action)的概念,就到下节讲完MVC的相关知识再继续我们框架之旅吧。
  1. 本节源码下载:

http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%202.rar

posted on 2010-07-08 00:49 BoolYang 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/XiaoG/archive/2010/07/08/1823605.html

PHP框架开发:二、从何处开始?URL相关推荐

  1. [导入]ASP.NET MVC框架开发系列课程(3):URL导向.zip(16.66 MB)

    讲座内容: ASP.NET MVC框架中一个关键特性就是基于URL的导向.本次课程将讲解URL Routing机制的使用. 课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名"老赵". ...

  2. 快递100快递管家 API 接口文档(V6)开发二:拼接授权URL

    1.拼接授权 url 拼接用户授权需访问 url ,示例及参数说明如下:  https://b.kuaidi100.com/open/oauth/authorize?response_type=cod ...

  3. 《SpringBoot框架开发技术整合》笔记(二)

    文章目录 前言 第五章 SpringBoot配置全局的异常捕获 一. 页面跳转形式 二. ajax形式 三. 统一返回异常的形式 参考 前言     笔者近期在慕课网上学习了<Springboo ...

  4. 免费分享thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开

    宝宝起名/八字起名/周易取名/周易八字起名平台网站/在线付费起名源码,thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开,PHP权威起名策划机构平台源码,Thinkphp3.2 ...

  5. iOS-MultipeerConnectivity框架开发(二)

    原文地址:http://www.appcoda.com/intro-ios-multipeer-connectivity-programming/ 编者:在iOS-MultipeerConnectiv ...

  6. 转载CSDN (MVC WebAPI 三层分布式框架开发)

    前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...

  7. [Python web开发] Web框架开发基础 (一)

    Python WEB框架 WSGI,WEB Server Gateway Interface,可以看做是一种底层协议,它规定了服务器程序和应用程序各自实现上面接口.Python的实现称为wsgiref ...

  8. Android Glide图片加载框架(二)源码解析之with()

    文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...

  9. PHP_TP5框架开发后端接口(代码编写思路)

    这半个月断断续续在学习用PHP的ThinkPHP框架开发后端API.现在总结记录一下开发一个接口需要做好哪些事,以此提高开发效率,并且也有不错的扩展性. 一.流程概要 基本是这么一个流程,略过环境搭建 ...

最新文章

  1. UVa1421 - Archery
  2. 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)
  3. 达摩院十大科技趋势发布:2020 非同小可!
  4. 强大js web甘特图制作之甘特图组件和数据对象
  5. windows 系统服务(转帖)
  6. 高中生用付款截图吃霸王餐近一年 网友:支付宝进来推销
  7. OpenMP变量的私有与共享
  8. 企业信息化建设(Enterprise Informationization Construction)
  9. 计算机的com端口万能驱动,USB转串口万能驱动
  10. 本机授权git授权,并绑定github操作流程
  11. java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context
  12. 甲基化芯片Beta值意义详解,以及minfi包使用
  13. 强化学习算法:AC系列详解
  14. 计算机控制ess和kv,自动控制理论第三章练习题
  15. 无法定位程序输入点(cmake opencv_contrib,并配置后)
  16. 取消Eclipse中的语法分析警告,去掉虫子 ,去掉红点报错方法
  17. 双引擎强悍!QQ电脑管家4.6 Beta1实测
  18. HTML Responsive Web Page
  19. 什么是Tuscany?
  20. CSP第十二次认证 行车路线 拆点

热门文章

  1. php数组排序不要用函数,PHP数组排序函数使用方法
  2. PHP开发网站全过程技术知识分析
  3. C# 图片处理之:彩色图片转为黑白图
  4. python mysql 数据类型_mysql学习:mysql数据类型有哪些?
  5. 大数据开发之Hadoop---初始Hadoop
  6. java jsp验证码_JSP实现随机验证码
  7. python中getattr()的用法
  8. Sublime Text3 注册码激活码
  9. C# 汉字存入bin文件,如何存
  10. 用pyinstaller把python脚本编译成可执行程序(windows系统)