首页 > 开发 > PHP > 正文

使用FleaPHP框架构建简单留言本应用

2024-05-04 22:59:08
字体:
来源:转载
供稿:网友

【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. 程序目录结构


整个留言本程序的结构是这样的:

/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:     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


<?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


<?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

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//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: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" />&nbsp;&nbsp;&nbsp;&nbsp;
            邮箱:<input type="text" size="20" name="email" id="email" />&nbsp;&nbsp;&nbsp;&nbsp;
            网站:<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. 实现效果图

总的结构就出来了,我们看以下运行结果的图片:

图片地址:/xrssfile/2007-1/25/200712510335349.jpg
(不知道为什么csdn不能传图片了,所以放到我百度空间里)

 

三、结束

更多应用请参考fleaphp的官方网站和下载源码中的示例程序,自己亲自尝试以下,也许,这个框架就是适合你的。

 

 

,欢迎访问网页设计爱好者web开发。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表