[原创]使用FleaPHP框架构建简单留言本应用
使用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-00 00:00:00 ' ,
PRIMARY KEY (`id`)
) TYPE = MyISAM ;
2. 程序目录结构
整个留言本程序的结构是这样的:
/Guestbook ----留言本根目录
/Guestbook/Config ----配置文件目录
/Guestbook/Model ----模型层文件目录
/Guestbook/View ----显示层文件目录
/Guestbook/Controller ----控制层文件目录
3. 配置文件
我先构建配置文件,用来保存数据库的基本配置信息,配置文件路径是: /Guestbook/Config/DSN.config.php
/* *
* DSN
* 数据源配置文件
*/
return array (
' dbDSN ' => array (
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' login ' => ' root ' ,
' password ' => '' ,
' database ' => ' test '
)
);
?>
4. 程序入口点(首页)
我们再来构建首页,就是我们所有应用的入口程序: /Guestbook/index.php
// ======================================
// Name: Gueskbook
// Desc: first fleaphp application
//======================================
//包含文件
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
/* *
* 缺省控制器
*/
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 , ' created DESC ' );
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
// ======================
// GuestBook Model
//======================
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
< 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 : 10px auto 10px ;
font-size : 12px ;
}
#main {
width : 758px ;
border : 1px solid ;
background-color : #eee ;
}
#posts {
height : 200px ;
text-align : center ;
font-size : 12px ;
}
#posts input, #posts textarea {
border : 1px solid ;
}
#posts h2 {
padding : 10px ;
text-align : center ;
font-size : 14px ;
}
#content-list {
text-align : center ;
}
#content-list h2 {
margin-left : 70px ;
padding : 10px ;
text-align : left ;
font-size : 14px ;
}
.tbl-style {
display : block ;
width : 600px ;
background-color : #ccc ;
margin-bottom : 10px ;
padding : 0 5px 0 5px ;
border : 1px solid green ;
}
.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 ="return checkForm()" >
昵称: < 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($posts as $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的官方网站和下载源码中的示例程序,自己亲自尝试以下,也许,这个框架就是适合你的。
[原创]使用FleaPHP框架构建简单留言本应用相关推荐
- 使用FleaPHP框架构建简单留言本应用
使用FleaPHP框架构建简单留言本应用 作者:heiyeluren 博客:http://blog.csdn.net/heiyeshuwu [FleaPHP介绍] FleaPHP是国产的一个MVC框架 ...
- [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇)...
.NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇) 前言:这个系列有段时间没有动了.主要是针对大家的反馈在修改代码.在修改的过程中,也有了一些新的体会,这里和大家分享一下,同时也 ...
- [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略
.NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从DAL中获取数据,以及数据的Mapping问题.实际上,一个业务框架最主要的作用就是简化业务 ...
- php mysql orm_PHP ORM框架与简单代码实现(转)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- Micronaut教程:如何使用基于JVM的框架构建微服务
\ 本文要点 \\ Micronaut是一种基于jvm的现代化全栈框架,用于构建模块化且易于测试的微服务应用程序.\\t Micronaut提供完全的编译时.反射无关的依赖注入和AOP.\\t 该框架 ...
- ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 ...
- spark restful_使用Spark构建简单的RESTful API
spark restful 免责声明 :这篇文章是关于名为Spark的Java微型Web框架的,而不是关于数据处理引擎Apache Spark的 . 在此博客文章中,我们将看到如何使用Spark构建简 ...
- 使用Spark构建简单的RESTful API
免责声明 :这篇文章是关于名为Spark的Java微型Web框架的,而不是关于数据处理引擎Apache Spark的 . 在此博客文章中,我们将看到如何使用Spark构建简单的Web服务. 如免责声明 ...
- 使用Express和MongoDB构建简单的CRUD应用程序
by Zell Liew 由Zell Liew 使用Express和MongoDB构建简单的CRUD应用程序 (Building a Simple CRUD Application with Expr ...
最新文章
- 施密特触发器(Schmitt Trigger)?
- 使用TVP批量插入数据
- LeetCode 49. 字母异位词分组(哈希)
- 机器学习(一)梯度下降算法的实现及过程分析
- Tomcat 8.5 配置 SSL 证书 1
- python 参数_Python命令行参数(七)
- 智能城市技术能够更好地改善日常生活
- php mysql数据库同步_教你怎样在两台MySQL数据库间实现同步
- mysql 改进前序遍历树_“无限层级传销”系统设计?前序遍历树的Mysql方案
- 网络中的网络 NiN 动手学深度学习v2 pytorch
- 计算机考研复试【英语面试题汇总】
- java实践课程感想_Java课程总结与感想
- 2021-01-16 SONiC系统管理10 Telemetry
- 抖音如何快速涨粉?李佳琦涨粉技巧揭秘
- 移位运算为什么比乘法除法快
- 学生家乡网页设计作品静态HTML网页模板源码 广西旅游景点网页设计 大学生家乡主题网站制作 简单家乡介绍网页设计成品
- uni-app 中文档阅读倒计时
- C IN ARM64 汇编基础-变量与表达式-基于The C Programming Language - Second Edition
- 循环冗余校验(CRC)之verilog实现
- Win10笔记本触控板关闭/打开
热门文章
- Tensorflow深度学习学习笔记
- matlab与maple互联,Maple与Matlab
- Android内存优化之图片查重
- android 自定义view 加载图片,Android自定义View基础开发之图片加载进度条
- 管理服务器没有响应怎么办,win10启动windows服务显示服务没有响应控制功能怎么解决...
- Exchange-获取主、所有SMTP地址
- 分治、CDQ分治小结(need to be updated)
- 介绍Java -D 命令行参数
- gts250 linux驱动下载,下载:NVIDIA显卡Linux驱动190.32测试版
- 美国大学计算机课程教材,美国大学计算机基础教学课程结构一瞥.pdf