使用FleaPHP框架构建简单留言本应用
作者:heiyeluren
博客:http://blog.csdn.net/heiyeshuwu
【FleaPHP介绍】
FleaPHP是国产的一个MVC框架,目前主流的框架Zend Framework、Symfony、CakePHP,国内还有FCS、Plite等框架都是值得期待的。
我们看看官方的介绍:
FleaPHP 为开发者轻松、快捷的创建应用程序提供帮助。FleaPHP 框架简单、清晰,容易理解和学习,并且有完全中文化的文档和丰富的示例程序降低学习成本。使用 FleaPHP 框架开发的应用程序能够自动适应各种运行环境,并兼容 PHP4 和 PHP5。FleaPHP 的全名是 Fast-Lightweight-Extensible-Automatic PHP web application framework。
今天我简单的使用FleaPHP来构建一个简单的留言本程序来大概了解以下FleaPHP的运作机制。关于FleaPHP的更多信息访问官方网站:www.fleaphp.org(电信)www.fleaphp.net (网通)。
FleaPHP开发指南:http://www.fleaphp.net/index.php?q=guide
【构建留言本应用】
1. 数据表结构
留言本的要求比较简单,就是能够留言、显示留言,这么简单功能,看以下数据表结构:
--
--
表的结构`guestbook`
--
CREATE
TABLE
`guestbook`(
`id`
int
(
10
)
NOT
NULL
auto_increment,
`nicker`
varchar
(
50
)
NOT
NULL
default
''
,
`email`
varchar
(
100
)
default
NULL
,
`url`
varchar
(
100
)
default
NULL
,
`content`
text
NOT
NULL
,
`created`
datetime
NOT
NULL
default
'
0000-00-0000:00:00
'
,
PRIMARY
KEY
(`id`)
)TYPE
=
MyISAM;
2. 程序目录结构
整个留言本程序的结构是这样的:
/Fleaphp/----基本框架目录
/Guestbook----留言本根目录
/Guestbook/Config----配置文件目录
/Guestbook/Model----模型层文件目录
/Guestbook/View----显示层文件目录
/Guestbook/Controller----控制层文件目录
3. 配置文件
我先构建配置文件,用来保存数据库的基本配置信息,配置文件路径是: /Guestbook/Config/DSN.config.php
<?
php
/*
*
*DSN
*数据源配置文件
*/
return
array
(
'
dbDSN
'
=>
array
(
'
driver
'
=>
'
mysql
'
,
'
host
'
=>
'
localhost
'
,
'
login
'
=>
'
root
'
,
'
password
'
=>
''
,
'
database
'
=>
'
test
'
)
);
?>
4. 程序入口点(首页)
我们再来构建首页,就是我们所有应用的入口程序: /Guestbook/index.php
<?
php
//
======================================
//Name:Gueskbook
//Desc:firstfleaphpapplication
//======================================
//包含文件
define
(
"
APP_DIR
"
,
dirname
(
__FILE__
));
define
(
"
VIEW_DIR
"
,
APP_DIR
.
"
/View/
"
);
require_once
(
"
../FLEA/FLEA.php
"
);
//
载入DSN配置文件
$dsnConfigFile
=
'
./Config/DSN.config.php
'
;
register_app_inf(
$dsnConfigFile
);
import(
dirname
(
__FILE__
));
//
执行
run();
?>
大致我们看就是配置APP_DIR常量,然后加载基本的FleaPHP框架文件和数据源配置信息,然后增加一个类搜索目录,最后执行run() 来运行整个程序。
5. 控制器(Controller)
现在来看看我们的主要东西,控制器(Controller): /Guestbook/Controller/Default.php
<?
php
/*
*
*缺省控制器
*/
class
Controller_Default
extends
FLEA_Controller_Action
{
/*
*
*留言本Model
*/
var
$_modelGB
;
/*
*
*构造函数
*/
function
Controller_Default(){
$this
->
_modelGB
=&
get_singleton(
"
Model_GB
"
);
}
/*
*
*缺省action
*/
function
actionIndex(){
$posts
=
$this
->
_modelGB
->
findAll(
null
,
'
createdDESC
'
);
include
(
"
View/index.php
"
);
}
/*
*
*插入一条留言
*/
function
actionCreate(){
$createArr
=
array
(
'
nicker
'
=>
htmlspecialchars
(
$_POST
[nicker])
,
'
email
'
=>
htmlspecialchars
(
$_POST
[email])
,
'
url
'
=>
htmlspecialchars
(
$_POST
[url])
,
'
content
'
=>
nl2br
(
htmlspecialchars
(
$_POST
[content]))
,
);
$this
->
_modelGB
->
create(
$createArr
);
redirect(
$this
->
_url());
}
}
?>
我们的控制器Controller_Default 是个缺省的控制器,它从 FLEA_Controller_Action 类继承了所有的属性和方法用于自己的控制。Controller_Default 类包含三个方法,构造函数是用来初始化一个Model类,actionIndex() 是缺省的动作方法,它从控制器 Model_GB 里把所有的留言提取出来,然后通过 View/index.php 文件来进行显示界面。actionCreate() 方法是创建一条留言的动作,就是构造好一个数据库,key是字段名,value是字段值的形式的数组,提交给 Model_GB 模型来进行处理,插入到数据库当中。
6. 模型层(Model)
我们再来看看模型层(Model)都实现一些什么代码:/Guestbook/Model/GB.php
<?
php
//
======================
//GuestBookModel
//======================
load_class(
"
FLEA_Db_TableDataGateway
"
);
class
Model_GB
extends
FLEA_Db_TableDataGateway
{
/*
*
*数据表名称
*/
var
$tableName
=
'
guestbook
'
;
/*
*
*数据表主键
*/
var
$primaryKey
=
'
id
'
;
}
?>
我们看,模型代码非常简单,就是一个继承了 FLEA_Db_TableDataGateway 类的 Model_GB 类,并且没有任何方法代码,只有两个属性,一个 $tableName 记录留言表的名称,$primaryKey 记录表里面的主键字段。
7. 显示层(View)
最后看看你我们用户能够查看到的显示层(View)的实现HTML: /Guestbook/View/index.php
<!
DOCTYPEHTMLPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
>
<
html
>
<
head
>
<
title
>
留言本
</
title
>
<
meta
name
="keywords"
content
=""
>
<
meta
name
="description"
content
=""
>
<
link
rel
="stylesheet"
href
="view/resource/css/gb2.css"
>
<
style
>
*
{
margin
:
0
;
padding
:
0
;
}
body
{
width
:
760px
;
height
:
100%
;
margin
:
10pxauto10px
;
font-size
:
12px
;
}
#main
{
width
:
758px
;
border
:
1pxsolid
;
background-color
:
#eee
;
}
#posts
{
height
:
200px
;
text-align
:
center
;
font-size
:
12px
;
}
#postsinput,#poststextarea
{
border
:
1pxsolid
;
}
#postsh2
{
padding
:
10px
;
text-align
:
center
;
font-size
:
14px
;
}
#content-list
{
text-align
:
center
;
}
#content-listh2
{
margin-left
:
70px
;
padding
:
10px
;
text-align
:
left
;
font-size
:
14px
;
}
.tbl-style
{
display
:
block
;
width
:
600px
;
background-color
:
#ccc
;
margin-bottom
:
10px
;
padding
:
05px05px
;
border
:
1pxsolidgreen
;
}
.td1-style
{
width
:
38px
;
text-align
:
left
;
line-height
:
20px
;
}
.td2-style
{
width
:
100px
;
text-align
:
left
;
line-height
:
20px
;
}
.td3-style
{
width
:
450px
;
text-align
:
left
;
padding
:
10px
;
}
</
style
>
<
script
language
="javascript"
>
function
checkForm(){
var
o
=
document.getElementById(
"
guestbook
"
);
if
(o.nicker.value
==
''
){
alert(
'
一定要输入昵称哦。。。
'
);
o.nicker.focus();
return
false
;
}
if
(o.content.value
==
''
&&
o.content.value.length
<
10
){
alert(
'
恩,留言内容总要输吧,我觉得最少不能要少于10个字,不然咋叫留言捏。。。
'
);
o.content.focus();
return
false
;
}
return
true
;
}
</
script
>
</
head
>
<
body
>
<
div
id
="main"
>
<
div
id
="posts"
>
<
h2
>
留言本
</
h2
>
<
form
action
="<?echo$this->_url('create');?>"
method
="post"
name
="guestbook"
id
="guestbook"
onsubmit
="returncheckForm()"
>
昵称:
<
input
type
="text"
size
="15"
name
="nicker"
id
="nicker"
/>
邮箱:
<
input
type
="text"
size
="20"
name
="email"
id
="email"
/>
网站:
<
input
type
="text"
size
="20"
name
="url"
id
="url"
/><
br
/><
br
/>
<
textarea
name
="content"
id
="content"
rows
="10"
cols
="80"
></
textarea
><
br
/><
br
/>
<
input
type
="submit"
value
="马上留言"
/>
</
form
>
</
div
>
<
div
id
="content-list"
>
<
h2
>
留言列表
</
h2
>
<?
foreach($postsas$gb){
?>
<
table
class
="tbl-style"
>
<
tr
>
<
td
class
="td1-style"
>
昵称:
</
td
><
td
class
="td2-style"
>
<?
=$gb[nicker]
?>
</
td
>
<
td
class
="td1-style"
>
邮箱:
</
td
><
td
class
="td2-style"
>
<?
=$gb[email]
?>
</
td
>
<
td
class
="td1-style"
>
网站:
</
td
><
td
class
="td2-style"
>
<?
=$gb[url]
?>
</
td
>
</
tr
>
<
tr
>
<
td
class
="td1-style"
>
留言:
</
td
><
td
class
="td3-style"
colspan
="5"
>
<?
=$gb[content]
?>
</
td
>
</
tr
>
</
table
>
<?
}
?>
</
div
>
</
div
>
</
body
>
</
html
>
8. 实现效果图
总的结构就出来了,我们看以下运行结果的图片:
图片地址:http://hiphotos.baidu.com/heiyeshuwu/pic/item/ea685bb5e82642cf37d3ca45.jpg
(不知道为什么CSDN不能传图片了,所以放到我百度空间里)
三、结束
更多应用请参考FleaPHP的官方网站和下载源码中的示例程序,自己亲自尝试以下,也许,这个框架就是适合你的。