php.MVC教程
ASP,JSP,PHP是WEB开发的三大技术,三种技术优缺点也早就有人分析过了。无非也就是ASP简单易用且有microsoft做靠山,JSP功能强大是因为有java支持,PHP则开源跨平台。在国内,ASP应用范围最广,JSP发展势头最猛,PHP则处于劣势。这可能与公司的支持以及技术的培训有关。
由于公司项目的需要,我这才接触PHP,用过一段时间后两点体会最深刻,一是学习容易,上手极快,内置函数很多,适合快速开发;二是学习资料匮乏,普及不广,很多时候都要去看英文文档。
对于中小型WEB应用来说,PHP有很强的竞争力,LINUX+APACHE+MYSQL+PHP(LAMP)的组合几乎可以胜任绝大多数网站的解决方案,对于大型应用来讲,对于系统架构要求更高,需要有成熟的框架支持,JSP的struts是个不错的框架,国内介绍它的资料也非常多,应用逐渐广泛起来,对应的PHP也有php.MVC,但是我搜遍了网络也没有发现一篇中文文档,这才让我动了翻译用户指南念头,也算是抛砖引玉,希望PHP能够在国内蓬勃发展起来。
php.MVC是PHP Web应用程序的一个开源框架,它实现了模型-视图-控制器(MVC)设计模式??Web应用程序的工业标准,鼓励基于Model2架构的应用程序设计。这种开发模式允许网页或其他显示内容从内部应用程序代码中分离出来,让设计者和程序员更容易地集中于他们各自的专业领域。这个框架提供了一个单独入口点的控制器。这个控制器接受HTTP请求,并根据配置文件分配给相应的动作处理。
模型包含了应用程序的业务逻辑,控制器负责处理请求,并转向到相应的显示组件??将HTML和PHP标签的结合起来的模板文件。处理结果返回给客户端浏览器,或者通过另外的协议比如SMTP。
php.MVC是用PHP来实现Jakarta Struts框架,目前它支持Struts的许多特性,包括申明应用程序的配置参数通过XML解析器。比如在XML配置文件中指定各种业务逻辑组件与对应的显示组件之间的映射。
php.MVC的网站地址http://www.phpmvc.net
二,php.MVC系列教程之安装配置
php.MVC必须安装在PHP v 4.1.0及以上版本的Web服务器上
Windows(Apache 2.0.51+php-4.3.9-Win32)
1.从http://www.apache.org下载相应的Apache版本。
2.从http://www.php.net下载相应的PHP版本。
3.从http://www.phpmvc.net下载相应的php.MVC版本。
4.建立目录c:\www作为Web服务器目录,c:\webapp作为Web根目录,
你也可以定义自己的目录,以下作相应的修改即可。
5.将Apache安装到c:\www,打开浏览器,在地址栏输入http://localhost测试是否安装成功
注意:如果你的系统上已经安装有其他Web服务器(如IIS 5),且占用了80端口,请先停止该服务器。
6.把PHP压缩包解压到c:\www。
7.将c:\www\php-4.3.9-Win32目录下php.ini-dist拷贝到系统目录如c:\winnt中并更名为php.ini,
将php4ts.dll拷贝到系统目录如c:\winnt\system32中,打开c:\www\Apache Group\Apache2\conf目录下http.conf文件,
在ScriptAlias /cgi-bin/ "c:/www/Apache Group/Apache2/cgi-bin/"下加入
ScriptAlias /php/ "c:/www/php-4.3.9-Win32/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"
并将DocumentRoot "c:\www\Apache Group\Apache2\htdocs"改为DocumentRoot "c:/webapp"
8.把php.MVC压缩包解压到c:\webapp
9.打开c:\webapp\phpmvc目录下Main.php文件,修改如下内容
// Set php.MVC library root directory
$appServerRootDir = 'c:\webapp\phpmvc'; // no trailing slash
// Set the application path
$moduleRootDir = 'c:\webapp\phpmvc'; // no trailing slash
// Set the OS Type [Optional] [UNIX|WINDOWS|MAC] if we have
// trouble detecting the server OS type. Eg: path errors.
$osType = 'WINDOWS';
确认c:\webapp\phpmvc\WEB-INF目录下phpmvc-config.data有可写权限。
打开浏览器,在地址栏输入http://localhost/phpmvc/Main.php?do=stdLogon测试是否安装成功。
10.要查阅更为详细的安装文档,请看http://www.phpmvc.net/docs/installIdx.php?doc=all。
三、php.MVC系列教程之框架介绍:
一、介绍
php.MVC是一个开放源代码的Web应用框架,实现了模型-视图-控制器(MVC)设计模式,鼓励基于Model2架构的应用程序设计。这种开发模式允许网页或其他显示内容从内部应用程序代码中分离出来,让网页设计者和程序员更容易地集中于他们各自的专业领域。
这个框架提供了一个单独入口点的控制器。这个控制器接受HTTP请求,并根据配置文件分配给相应的动作处理。模型则包含了应用程序的业务逻辑。当请求处理完成,控制器调用相应的显示组件??通常用模板文件来实现。处理结果返回给客户端浏览器,或者通过另外的协议比如SMTP。
php.MVC是用PHP来实现Jakarta Struts框架,目前它支持Struts的许多特性,包括通过XML解析器实现XML与对象的映射,从而设置应用程序的配置参数。比如在XML配置文件中指定各种业务逻辑组件与对应的显示组件之间的映射。
图1所示的逻辑图描述了框架的高层结构。
可以看出框架包括三个主要的组件:前端控制器、主控制器和动作分配器。
二、优/缺点
优点:
1. php.MVC是一个开源项目能让你完全接触源代码,使开发者能更深入的了解其内部实现机制。
2. 使用php.MVC可以促进模块化开发,促使开发者和设计者的角色分离,提高代码的重用性和可维护性。
3. php.MVC框架的学习可以借鉴Jakarta Struts的一些知识和经验,如果你有开发Struts的经验,那么就可以快速地用php.MVC来进行开发。
4. MVC模式是Java开发Web应用程序的一个设计标准,使用php.MVC框架还有助于Web开发者理解MVC设计模式。
缺点:
1. php.MVC功能仍在不段变化和完善中,你需要随时关注最新版本。
2. 使用php.MVC需要进行额外的学习过程。
3. 应用php.MVC可以得到清晰的程序结构,但也会增加系统复杂度。
4. 应用php.MVC可以让程序更加有条理,但也会降低程序执行速度。
因此你需要根据项目大小、周期、成本,开发人员素质等众多条件来决定是否应用php.MVC框架。
四、php.MVC系列教程之处理流程:
php.MVC框架由许多类组装而成,但是我们不必了解所有类的详细工作过程也可以使用这个框架,图2显示了我们使用该框架需要了解的一些核心组件。
从图2我们可以看到一个典型的Web浏览器的HTTP请求如何与我们应用程序框架的核心类进行交互,然后如何得到HTTP响应返回到Web浏览器。
现在,让我们以一个实例来了解框架的处理流程。比如要查看公司销售报表,先在浏览器地址栏输入
http://www.myhost.com/mycompany/Main.php?do=salesReport 客户端便发送给php.MVC应用程序一个请求。应用程序框架的控制器处理这个请求,分析查询字符串,取出请求路径关键字。在这个实例中,路径为salesReport。后面我们将看到如何通过XML配置文件来配置必需的应用行为,绑定表单验证,业务逻辑处理和显示组件。
如果我们想严格控制只有通过验证的人才能访问这个报表,则用户必须先输入基本的验证信息,通常是用户名和密码。为了限制只有通过了验证的用户才能访问该报表,这里用了一个被称作ActionForm的类,我们需要继承框架的ActionForm来定义自己的表单验证类,比如SalesActionForm,如下所示:
class SalesActionForm extends ActionForm { ... }.
在SalesActionForm类里我们要检查用户是否可信任的以决定下一步动作。如果用户没有通过验证,我们将重定向到初始页面要求重新输入;如果他通过了验证,控制器会通过Action类来调用业务处理类。
我们通过继承框架Action类来进行自定义,比如SalesAction,如下所示:
class SalesAction extends Action { ... }.
在XML配置文件中我们要定义请求与Action类的对应关系,这样控制器找到相应的Action类,这里调用SalesAction。在SalesAction类里我们能访问业务处理类和数据源。本例中我们从数据库中取得销售数据,制成报表格式。例如:我们创建一些对象,后面在销售报表模板中可以使用这些对象,如下所示:
// Sales report items - per zone (individual object instances):
$item1 = new Item('Northern Zone Sales' , $salesNorth);
$item2 = new Item('Southern Zone Sales' , $salesSouth);
...
当我们完成了销售报表,就要通过控制器指定显示组件显示出来。这是通过一个在XML配置文件中已经配置好的被称作Forward的对象的来完成,如下所示:
return $mapping->findForwardConfig('salesReportSuccess');
Forward对象包含了销售报表模板的路径,比如salesReport.tpl,这也是在配置文件中定义。
然后控制器将请求转向到ActionDispatcher,由它定向到指定的显示组件,在本例中是salesReport.tpl,在模板中通过访问先前定义对象和变量从而得到在SalesAction里准备好的数据。
下面显示我们如何用phpTAL模板系统访问报表数据并生成显示视图,对象$item1我们用类变量$item1->value
...
Sales report->value will appear here |
|
八、 php.MVC系列教程之控制器
控制器(Controller)由一些类组成,根据预先定义的配置选项处理用户请求。一个典型的用户请求如下:
http://www.myhost.com/mycompany/Main.php?do=salesReport.
php.MVC 控制器由两部分组成:前端控制器和控制器。当请求到来时,前端控制器负责安装应用程序,控制器则根据phpmvc-config.xml的配置属性处理请求。
用户请求被Main.php文件接收,这里,将设置一些初始化参数。前端控制器将执行以下任务:
定义应用程序路径:这将指定php.MVC类库以及Web应用程序的路径,如下:$appServerRootDir = 'C:/WWW/phpmvc-base';
$moduleRootDir = 'C:/WWW/mycompany'; 定义应用程序的ActionDispatcher:我们通常需要扩展框架ActionDispatcher来定义自己的Dispatcher类:
$actionDispatcher = 'MyActionDispatcher'; 初始化应用程序类路径:为了将类和资源装入,前端控制器将导入预先定义的全局路径以及应用程序路径。我们可以在/WEB-INF/ModulePaths.php中设置路径,如下:
$appDirs = array();
...
$appDirs = 'WEB-INF/report_tpl';
$appDirs = 'WEB-INF/report_classes'; 包含应用程序类:前端控制器将导入它所需要的类文件,我们也可以用/WEB-INF/prepend.php文件来有选择性地导入一些特殊的应用程序类文件。如下:
include_once './WEB-INF/mytools/MyTools.php'; 配置应用程序:前端控制器将为应用程序设置配置信息,比如我们先前定义的ActionDispatcher。 初始化控制器:前端控制器现在将创建一个应用服务器实例(ActionServer)。 导入配置信息:前端控制器现在将导入应用程序配置信息,假如phpmvc-config.xml从最后一次请求后被修改了,phpmvc-config.xml文件将被重新处理并将数据缓存到/WEB-INF/phpmvc-config.data中。 初始化HTTP请求:前端控制器现在将设置HTTP请求并添加请求属性。 调用应用程序控制器:前端控制器现在已经完成了准备工作,将会把处理权交给控制器。
控制器接收从前端控制器传来的请求,根据配置属性执行一系列操作。
处理action路径:控制器将根据请求路径识别出关键字,选择一个action映射。比如请求路径为:
http://www.myhost.com/mycompany/Main.php?do=salesReport, action路径就为salesReport。
"Pragma", "No-cache"
"Cache-Control", "no-cache"
"Expires", 1 处理预处理任务:可以在自定义的ActionServer子类中覆盖这个方法,执行一些指定的预处理任务。 处理Action映射:控制器将根据请求识别action映射,根据phpmvc-config.xml的相应节点生成action映射对象(ActionConfig),比如:
validate = "true"
input = reportsIndex.tpl>
假如validate()返回True(验证通过),则将继续处理。处理Forward:控制器检查forward映射的URI是否正常,如果是,继续处理。 处理Include:控制器检查include映射的URI是否正常,如果是,继续处理。 处理Action创建:控制器将创建或获取Action实例来处理这个请求,这是用action的type属性来定义的,比如:
... 处理Action执行:控制器现在将调用Action类的execute()方法,比如SalesReportAction->execute(...)。在该方法内,我们将调用业务处理逻辑类。 处理Action链:控制器将检查是否还有另外一个Action需要处理,在应用程序配置文件中,我们通过ActionChain能定义一系列Action,为了定义ActionChain,需要为action节点的forward元素添加一个nextActionPath属性,比如:
...
path = "salesReport.tpl"
nextActionPath = "salesReport2"/>
... forward元素的path属性是必须项,假如这个特殊的Action没有输出,我们可以设置path = ""。 处理Action Forward:控制器将转发或重定向到指定的资源,一个forward请求在当前处理器中被处理。RequestProcessor只是把控制权交给ActionDispatcher,那里包含了指定的URI模板。比如:
path="forwardRequest"
redirect="false"/> 重定向请求实际是发送给客户端浏览器一个标头响应,然后重定向到一个新的URL。在发送重定向标头信息时当前的处理将立即终止。
path="/MyApp/Main.php?do=newRequest"
redirect="true"/>
path="http://www.myhost.com/MyApp/Main.php?do=newRequest"
redirect="true"/>
假如没有其他的Action需要处理,控制器处理结束。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
- 逃离伪PHP软件工程师应该做的事
- php兑现自动获取生成关键词功能
- 这个SQL里的函数是mysql函数还是php函数...
- Oauth2.0开发 为什么子要提交access_...
- php.MVC教程
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
- 最新文章
- 热门排行
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论