分类:
2008-04-12 19:55:10
WASP(PHP网站程序结构) 是建立在PHP5上的第三方框架。最近很多软件开发工程师都从像JAVA 和C#企业级的语言转向了像 Python ,Ruby 和PHP的语言。随着PHP5的发布,PHP达到了开发者可以自由自在进行开发的水平,被认为是一种黑客语言(工作方式就像黑客工作一样自由)。通过证明,在PHP5环境中“企业-类”框架可以被创建并能在复杂环境中应用。WASP将帮助更多的开发者进行转变。
WASP最初在"Three-Tier Development with PHP 5"这篇文章就被提及到。自从那时,它就开始不停地为改进以便在不同的PHP框架之间、传统的三层工具进行链接。PangeMedia已经把它应用到许多的生产环境中去了。
这篇文章举例说明了如何去建立一个小型的数据库驱动程序;一个简单的网站应用程序任务列表。 这个例子虽然短,但是去证实了WASP大部分强大的特征。
文章中使用的代码是建立在WASP 1.1上。使用PHP5语言————是有用的,但不是必要的。想了解其更多的方法和类的信息请浏览 WASP API
documentation。另外,下面的这些资源也许对你是有帮助的:
PHP Manual
"Classes and Objects in PHP 5"
"DB_DataObject reference"
"HTML_Template_Flexy reference"
Phing reference
安装和配置
下载新最版式的WASP,然后通过PEAR包管理进行安装。详细的安装介绍,请浏览 WASP Installation and Configuration 指南。
通过命令行创建一个WASP工程
phing -buildfile PEAR_DIR/lib/php/data/WASP/build.xml wasp-project
其中PEAR_DIR是安装PEAR包的路径。这个路径可以通过执行下面这条命令来得到:
$ pear config-get php_dir
如果一切顺得,将会看到:
Buildfile: /usr/local/php5/lib/php/data/WASP/build.xml
WASP > wsap-project:
Directory to create project in >
输入有效的路径名,一个新的WASP工程将在这个路径下创建,它将创建一个目录,并将build.xml和build.properties文件拷贝到这个目录下面。
例如,我创建了一个这们的目录 /Users/brianfioca/Development/projects/Todo,确定这个目录在你的WEB服务根目录下面。
Todo目录的结构应该如下:
|_Todo
|_build.xml
|_build.properties
WASP 使用Phing和build.properties文件来管理相关配置。当创建新应用程序时,Phing工具将从build.properties文件中读取配置信息,并为应用程序创建相应的配置文件。
下面是上面创立的工程的默认 build.properties 文件
build.properties
###################
# FILE: build.properties
# DESC: wasp project configuration properties file
#
# The properties below are used to configure your wasp application.
# Set these properties to customize your wasp install.
#
# run phing config to regenerate the configuration when these are changed.
##
# The name of the application
app.name= Todo
# Toggle Debug output
debug.flag= True
# Toggle for email of error messages
email.flag= False
session.flag= True
# URL of the database for this application
database.url= mysql://user:pass@localhost/todo
# Directory where pear packages are installed
pear.dir= /usr/local/php5/lib/php
在配置中,app.name 的值是 'Todo', 这个值是应用程序的名称,和项目的根目录一样(如果没有指定,则是app.dir路径或者是wasp路径)。of all modules, chunks, and templates that the build tool will create.?????
app.dir 是你项目的路径,这个路径必须在你的WEB根目录里面。例如我设定app.dir 为 /var/www 这个是我的Apache HTTP服务器的WEB根目录。当你的应用程序创建,将会自在创建在 /var/www/Todo里面。
pear.dir 是PEAR的安装路径,这里面包括了 DB/DataObject and HTML/Template/Flexy。 像前面提到的可以使用 $pear config-get php_dir得到PEAR的安装路径。
database.url 是顶目要使用的数据库连接URL。这个例子展示了我们使用了一个本机名子为 'todo' 的MYSQL数据库。
在任何情况下你想更改配置,可以运行:
$phing config
/////////////////////////////////1
The Database
下一步将配置 database模块。我们为任务列表应用程序创建一个数据库,下面是SQL语句:
CREATE DATABASE todo;
CREATE TABLE `Task` (
`TaskId` bigint(20) NOT NULL auto_increment,
`Due` date NOT NULL,
`Name` text NOT NULL,
PRIMARY KEY (`TaskId`)
);
表Task有三个字段。TaskId 是主键,Due 是任务的截止时间,name是任务的名称。开发WASP应用程序,强列建义表把像id 这样的列设为主键.
开发应用程序
现在已经成功安装了WASP,并创建了数据库,下面开始为任务列表程序写代码了。
模型,视图,控制
下一步是为应用程序创建模型,视图,控制。通过使用Phing创建 build.xml可以达到这个目的。
在这里没什么可怕一,"Model"仅仅是一个数据库对象的特别名字, "View"是页面的HTML代码, "Controller" 是一些PHP代码,通过这些代码来控制页面如何画和如何从"Model"操纵数据。
创建应该程序并生成主要的控制和视图对象:
$phing app
出现提示时选择 Todo
它将创建主要的应用程序目录,这个目录用来保存PHP代码,并在这里面执行,同时包含应用程序的模型和控制类。
在app.dir指定的目录下面(或当前目录,如果app.dir没指定)将出得到下面的结构:
|_Todo/
|_templates/
|_templates_c/
在Todo/目录下面有控制类 TodoMainModule.php 和 TodoMainIndexPage.php 和控制文件 index.php。
templates/目录是用来存放视图的。这个目录里面存放了所有的"块"或者模板文件。这些文件中包括了HTML代码和Flexy代码。这个目录里面是一个接着一个的有关联的。不要担心这些很难理解,我们将在下面一下一下解释。
templates_c/目录是用来存放编译后的Flexy模板的文件。这个目录必须拥有可写的权限。
下一步创建数据模型对象
$phing db
执行后的目录结构如下:
|_Todo/
|_db/
|_templates/
|_templates_c/
db/目录存放了所有的模型类。在这种情况下,你可以方便地获得 TaskWrapper.php。针对数据库的每一个表都有一个模块类。
在应用程序中将需要一个模型用来创建 todo entries , 所以创建新的 todo"Entry"模型。
$phing module
选择 "Entry" 后,目录结构如下:
|_Todo/
|_db/
|_templates/
|_templates_c/
|_Entry/
|_templates/
在Entry目录里有很多控制类和视图块。
测试安装
在继续进行之前,很重要的一件事情是确保一切都已经正确安装并且控制和视图都正常运行。默认情况下,在运行时,应用程序和每一个模块将会创建一些虚拟页面。
开启WEB服务,打开浏览器输出网址
打开页面应该如下
Figure 1. TodoMain index page
也有可以得到下面的信息
can not write to 'compileDir', which is
'/path/to/wasp/install/directory/templates_c/'
Please give write and enter-rights to it
如果这样,请检查是否有templates_c目录在你的项目目录下存在,并且对WEB服务有可写的权限。
现在打开页面 并确定可正常的显示。
Entry Module(输入模块)
下面来为任务进入页面创建输入代码。这里是为你的列表输出任务的时候。