返回列表 回复 发帖

[学习心得] [转]使用FleaPHP框架构建简单留言本应用

【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. 数据表结构

留言本的要求比较简单,就是能够留言、显示留言,这么简单功能,看以下数据表结构:
  1. --
  2. -- 表的结构 `guestbook`
  3. --
  4. CREATE TABLE `guestbook` (
  5.   `id` int(10) NOT NULL auto_increment,
  6.   `nicker` varchar(50) NOT NULL default '',
  7.   `email` varchar(100) default NULL,
  8.   `url` varchar(100) default NULL,
  9.   `content` text NOT NULL,
  10.   `created` datetime NOT NULL default '0000-00-00 00:00:00',
  11.   PRIMARY KEY  (`id`)
  12. ) TYPE=MyISAM ;

复制代码
2. 程序目录结构


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

/Fleaphp/                            ----基本框架目录
/Guestbook                        ----留言本根目录
/Guestbook/Config           ----配置文件目录
/Guestbook/Model            ----模型层文件目录
/Guestbook/View              ----显示层文件目录
/Guestbook/Controller     ----控制层文件目录


3. 配置文件

我先构建配置文件,用来保存数据库的基本配置信息,配置文件路径是: /Guestbook/Config/DSN.config.php
  1. <?php
  2. /**
  3. * DSN
  4. * 数据源配置文件
  5. */

  6. return array(
  7.     'dbDSN' => array(
  8.         'driver'    => 'mysql',
  9.         'host'      => 'localhost',
  10.         'login'     => 'root',
  11.         'password'  => '',
  12.         'database'   => 'test'
  13.     )
  14. );

  15. ?>
复制代码
4. 程序入口点(首页)

我们再来构建首页,就是我们所有应用的入口程序: /Guestbook/index.php
  1. <?php
  2. //======================================
  3. // Name:     Gueskbook
  4. // Desc:     first fleaphp application
  5. //======================================

  6. //包含文件
  7. define("APP_DIR", dirname(__FILE__));
  8. define("VIEW_DIR", APP_DIR ."/View/");
  9. require_once("../FLEA/FLEA.php");

  10. //载入DSN配置文件
  11. $dsnConfigFile = './Config/DSN.config.php';
  12. register_app_inf($dsnConfigFile);
  13. import(dirname(__FILE__));

  14. //执行
  15. run();

  16. ?>
复制代码
大致我们看就是配置APP_DIR常量,然后加载基本的FleaPHP框架文件和数据源配置信息,然后增加一个类搜索目录,最后执行run() 来运行整个程序。



5. 控制器(Controller)

现在来看看我们的主要东西,控制器(Controller): /Guestbook/Controller/Default.php
  1. <?php
  2. /**
  3. * 缺省控制器
  4. */

  5. class Controller_Default extends FLEA_Controller_Action
  6. {
  7.     /**
  8.      * 留言本Model
  9.      */
  10.     var $_modelGB;
  11.    
  12.     /**
  13.      * 构造函数
  14.      */
  15.     function Controller_Default(){
  16.         $this->_modelGB =& get_singleton("Model_GB");
  17.     }
  18.    
  19.     /**
  20.      * 缺省action
  21.      */
  22.     function actionIndex(){
  23.         $posts = $this->_modelGB->findAll(null, 'created DESC');
  24.         include("View/index.php");
  25.     }
  26.    
  27.     /**
  28.      * 插入一条留言
  29.      */
  30.     function actionCreate(){
  31.         $createArr = array(
  32.             'nicker'    => htmlspecialchars($_POST[nicker]),
  33.             'email'     => htmlspecialchars($_POST[email]),
  34.             'url'        => htmlspecialchars($_POST[url]),
  35.             'content'    => nl2br(htmlspecialchars($_POST[content])),
  36.         );   
  37.         
  38.         $this->_modelGB->create($createArr);
  39.         redirect($this->_url());
  40.     }
  41. }

  42. ?>
复制代码
我们的控制器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
  1. <?php
  2. //======================
  3. //  GuestBook Model
  4. //======================

  5. load_class("FLEA_Db_TableDataGateway");

  6. class Model_GB extends FLEA_Db_TableDataGateway
  7. {
  8.     /**
  9.      * 数据表名称
  10.      */
  11.     var $tableName = 'guestbook';
  12.    
  13.     /**
  14.      * 数据表主键
  15.      */
  16.     var $primaryKey = 'id';   
  17. }

  18. ?>
复制代码
我们看,模型代码非常简单,就是一个继承了 FLEA_Db_TableDataGateway 类的 Model_GB 类,并且没有任何方法代码,只有两个属性,一个 $tableName 记录留言表的名称,$primaryKey 记录表里面的主键字段。



7. 显示层(View)

最后看看你我们用户能够查看到的显示层(View)的实现HTML: /Guestbook/View/index.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>留言本</title>
  5. <meta name="keywords" content="">
  6. <meta name="description" content="">
  7. <link rel="stylesheet" href="view/resource/css/gb2.css">
  8. <style>
  9. *{
  10.     margin:0;
  11.     padding:0;
  12. }
  13. body{
  14.     width:760px;
  15.     height:100%;
  16.     margin:10px auto 10px;
  17.     font-size:12px;
  18. }
  19. #main{
  20.     width:758px;   
  21.     border:1px solid;
  22.     background-color:#eee;  
  23. }
  24. #posts{
  25.     height:200px;
  26.     text-align:center;
  27.     font-size:12px;
  28. }
  29. #posts input, #posts textarea{
  30.     border:1px solid;
  31. }

  32. #posts h2{
  33.     padding:10px;
  34.     text-align:center;
  35.     font-size:14px;
  36. }
  37. #content-list{
  38.     text-align:center;
  39. }
  40. #content-list h2{
  41.     margin-left:70px;
  42.     padding:10px;
  43.     text-align:left;
  44.     font-size:14px;
  45. }
  46. .tbl-style{
  47.     display:block;
  48.     width:600px;
  49.     background-color:#ccc;
  50.     margin-bottom:10px;
  51.     padding:0 5px 0 5px;
  52.     border:1px solid green;
  53. }
  54. .td1-style{
  55.     width:38px;
  56.     text-align:left;
  57.     line-height:20px;

  58. }
  59. .td2-style{
  60.     width:100px;
  61.     text-align:left;
  62.     line-height:20px;
  63. }
  64. .td3-style{
  65.     width:450px;
  66.     text-align:left;
  67.     padding:10px;
  68. }
  69. </style>

  70. <script language="javascript">
  71. function checkForm(){
  72.     var o = document.getElementById("guestbook");
  73.     if (o.nicker.value == ''){
  74.         alert('一定要输入昵称哦。。。');
  75.         o.nicker.focus();
  76.         return false;
  77.     }
  78.     if (o.content.value == '' && o.content.value.length<10){
  79.         alert('恩,留言内容总要输吧,我觉得最少不能要少于10个字,不然咋叫留言捏。。。');
  80.         o.content.focus();
  81.         return false;
  82.     }
  83.     return true;
  84. }
  85. </script>
  86. </head>

  87. <body>
  88. <div id="main">
  89.     <div id="posts">
  90.         <h2>留言本</h2>
  91.         <form action="<? echo $this->_url('create'); ?>" method="post" name="guestbook" id="guestbook" onsubmit="return checkForm()">
  92.             昵称:<input type="text" size="15" name="nicker" id="nicker" />    
  93.             邮箱:<input type="text" size="20" name="email" id="email" />    
  94.             网站:<input type="text" size="20" name="url" id="url" /><br /><br />
  95.             <textarea name="content" id="content" rows="10" cols="80"></textarea><br /><br />
  96.             <input type="submit" value="马上留言" />
  97.         </form>
  98.     </div>

  99.     <div id="content-list">
  100.         <h2>留言列表</h2>   
  101.         <? foreach($posts as $gb){ ?>
  102.         <table class="tbl-style">
  103.             <tr>
  104.                 <td class="td1-style">昵称:</td><td class="td2-style"><?=$gb[nicker]?></td>
  105.                 <td class="td1-style">邮箱:</td><td class="td2-style"><?=$gb[email]?></td>
  106.                 <td class="td1-style">网站:</td><td class="td2-style"><?=$gb[url]?></td>
  107.             </tr>
  108.             <tr>
  109.                 <td class="td1-style">留言:</td><td class="td3-style" colspan="5"><?=$gb[content]?></td>
  110.             </tr>
  111.         </table>
  112.         <? } ?>
  113.         
  114.     </div>
  115. </div>
  116. </body>
  117. </html>
复制代码
8. 实现效果图

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

图片地址:
(不知道为什么CSDN不能传图片了,所以放到我百度空间里)



三、结束

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

[ 本帖最后由 xiemengjun 于 2007-1-23 20:44 编辑 ]

你怎么不早点出?害我做了好几天!

你怎么不早点出?害我做了好几天!
不错,顶
顶!
顶,学习了。有了这些例子加上学习指南学习起来难度不大。
放下的时间太长了,好多函数都忘记了。
为什么我按照例子在浏览器会出现乱码?
You don't have permission to access /study/test3/Guestbook/< on this server.请问这是怎么回事?
Forbidden
You don't have permission to access /study/test3/Guestbook/< on this server.


--------------------------------------------------------------------------------

Apache/1.3.33 Server at 127.0.0.1 Port 80
你apache没配置好?
我用得是APM
这个问题应该是没有找到文件或者没有这个目录的访问权限,你再仔细检查一下吧。

或者试试看 APM Express 1.5 版本。
我现在用的是APMXE5,但是上面那个例子都没有设置权限啊?怎么会有权限的问题呢?
返回列表