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应用程序(一般是指网站)一般都有一个或多个配置文件,这里我们也同样需要。
- 在public下创建一个config文件夹,创建一个config.php文件,先不用写什么,备用;
- 在index.php中包含config.php文件:
因为index.php是我们的入口文件,用户访问的URL都会传向index.php,那么我们就可以在index.php中分析URL,根据URL提供的参数合理调用其它代码,并把用户实际想得到的内容返回给用户。这里的合理调用也就是我们的框架要做的事情了,因此我们把它的代码写到框架所属的文件夹中。
注:因为本教程是我在制作一个网站时一边开发一边写的,框架的名称及“命名空间”也就用了网站域名的缩写LQP(loveqipai.com),你可以改成你希望使用的名称。
- 在library下建立文件夹: LQP,用于存放所有框架代码
- 创建我们框架中的第一个文件,命名为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。
- 上面的代码涉及到了控制器(Controller)与动作(Action)的概念,就到下节讲完MVC的相关知识再继续我们框架之旅吧。
- 本节源码下载:
http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%202.rar
转载于:https://www.cnblogs.com/XiaoG/archive/2010/07/08/1823605.html
PHP框架开发:二、从何处开始?URL相关推荐
- [导入]ASP.NET MVC框架开发系列课程(3):URL导向.zip(16.66 MB)
讲座内容: ASP.NET MVC框架中一个关键特性就是基于URL的导向.本次课程将讲解URL Routing机制的使用. 课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名"老赵". ...
- 快递100快递管家 API 接口文档(V6)开发二:拼接授权URL
1.拼接授权 url 拼接用户授权需访问 url ,示例及参数说明如下: https://b.kuaidi100.com/open/oauth/authorize?response_type=cod ...
- 《SpringBoot框架开发技术整合》笔记(二)
文章目录 前言 第五章 SpringBoot配置全局的异常捕获 一. 页面跳转形式 二. ajax形式 三. 统一返回异常的形式 参考 前言 笔者近期在慕课网上学习了<Springboo ...
- 免费分享thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开
宝宝起名/八字起名/周易取名/周易八字起名平台网站/在线付费起名源码,thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开,PHP权威起名策划机构平台源码,Thinkphp3.2 ...
- iOS-MultipeerConnectivity框架开发(二)
原文地址:http://www.appcoda.com/intro-ios-multipeer-connectivity-programming/ 编者:在iOS-MultipeerConnectiv ...
- 转载CSDN (MVC WebAPI 三层分布式框架开发)
前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...
- [Python web开发] Web框架开发基础 (一)
Python WEB框架 WSGI,WEB Server Gateway Interface,可以看做是一种底层协议,它规定了服务器程序和应用程序各自实现上面接口.Python的实现称为wsgiref ...
- Android Glide图片加载框架(二)源码解析之with()
文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...
- PHP_TP5框架开发后端接口(代码编写思路)
这半个月断断续续在学习用PHP的ThinkPHP框架开发后端API.现在总结记录一下开发一个接口需要做好哪些事,以此提高开发效率,并且也有不错的扩展性. 一.流程概要 基本是这么一个流程,略过环境搭建 ...
最新文章
- UVa1421 - Archery
- 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)
- 达摩院十大科技趋势发布:2020 非同小可!
- 强大js web甘特图制作之甘特图组件和数据对象
- windows 系统服务(转帖)
- 高中生用付款截图吃霸王餐近一年 网友:支付宝进来推销
- OpenMP变量的私有与共享
- 企业信息化建设(Enterprise Informationization Construction)
- 计算机的com端口万能驱动,USB转串口万能驱动
- 本机授权git授权,并绑定github操作流程
- java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context
- 甲基化芯片Beta值意义详解,以及minfi包使用
- 强化学习算法:AC系列详解
- 计算机控制ess和kv,自动控制理论第三章练习题
- 无法定位程序输入点(cmake opencv_contrib,并配置后)
- 取消Eclipse中的语法分析警告,去掉虫子 ,去掉红点报错方法
- 双引擎强悍!QQ电脑管家4.6 Beta1实测
- HTML Responsive Web Page
- 什么是Tuscany?
- CSP第十二次认证 行车路线 拆点