Zend Framework实现具有基本功能的留言本(附demo源码下载)


Posted in PHP onMarch 22, 2016

本文实例讲述了Zend Framework实现具有基本功能的留言本。分享给大家供大家参考,具体如下:

一个留言本...具有的基本功能就是.1.发表留言. 2.回复留言.3.管理留言(修改,删除等操作).

我这里只是写了基本的操作,比如加留言验证码.页面的美化什么的我都
没有做.我只是给大家一个思想..很多东西要靠我们自己去学了.

另一个就是我的留言用了AJAX.就是你一发表.数据就会在页面显示..不过大家要了解Jquery的AJAX的用法..我相信大部分人都会这个JS类库吧.

要是不懂也没关系..你们可以改成不是AJAX的..只要把发表留言的FROM的提交动作转换成我们控制里的一个动作..相信这个不是问题.好了..开始工作:

我们的目录结构和以前一样,大致不变..下面要有改动的..大家也不要急..我会教大家如何做:

第一:先建立好我们的模板页面(View)..

按照上篇教程的目录.application/views/scripts目录下有一些模板页.如(index.phtml,edit.phtml).我们删除它们..现在加一个message文件夹.

在message里加上(edit.phtml,index.phtml,message.phtml)三个模板文件.完成后.我们在application/views/scripts/目录下加上(header.phtml,footer.phtml)二个模板文件.

因为这二个文件以后会重用来..所以把他们直接放到application/views/scripts/下..好了模板建立好了.现在就是加入一个HTML.JS.IMAGE了.我把他们这些都放在网站根目录public文件夹下.大家可以对应我的源码来看一下..要是有点乱..请大家根据源码来看这教程..(^_^不好意思,我只能这样表达.我也不知道如何写才能让你们更了解.请大家体谅啊!)

第二:接下来,我们写我们的数据层程序(Model).

1.我们在原来的表中加上下面几个字段:pid(标志是否是回复,0为留言.为为0的是为回复) ,author(留言者),headimg(留言者头像),email(留言者电子邮件), ip(留言者IP地址),
show(留言是否显示.这个要在生台管理能用.这教程这里没有用到.), addtime(留言时间), updatetime(留言修改时间).字段类型的设置请大家看源码SQL文件.

2.我们在application/models/目录下有一个Message.php.我们先写好我们留言本的Model .主要是对留言本数据层的操作.我增加了下面几个方法:
getAllMessage(取到所有的留言) , getAllReMessage(取到所有的回复留言数据) , getMessageByID(根据ID取留言数据), updateMessageByID(修改留言), delMessageByID(删除留言)

具体程序如下(程序上面也有注解):

class Message extends Zend_Db_Table
{
 protected $_name ="message";
 protected $_primary = 'id';
 /* * 取到所有的留言 */
 public function getAllMessage(){
 $messageArray=$this->fetchAll("message.pid=0",
      "message.id DESC")->toArray();
 return $messageArray;
 }
 /* * 取到所有的回复留言数据 */
 public function getAllReMessage(){
 $ReArray=$this->fetchAll("message.pid!=0",
      "message.id DESC")->toArray();
 return $ReArray;
 }
 /* * 根据ID取留言数据 */
 public function getMessageByID($id){
 $messageone=$this->fetchAll('id='.$id)->toArray();
 return $messageone;
 }
 /* * 修改留言 */
 public function updateMessageByID($array,$id){
 $db = $this->getAdapter();
 $where=$db->quoteInto('id = ?', $id);
 $this->update($array, $where);
 }
 /* * 删除留言 */
 public function delMessageByID($id){
 $where = 'id = ' . $id;
   $this->delete($where);
   return true;
 }
}

第三:完成上面二项.最后就我们的控制层了(Controller).打开application/controllers/IndexController.php这个控制器..把原来的不要的东西给删除了.我在上面加上了下面

一个message方法(也叫动作Action).不过其它的Action都有改动..请大家参与源码来进行分析.这里我只贴也我新加入的messageAction这个方法(代码上都有注解.请自行查看.谢谢):

public function messageAction()
{
 if($this->_request->isPost()){
 Zend_Loader::loadClass('Zend_Filter_StripTags');
 $filter=new Zend_Filter_StripTags();
 $username=$filter->filter($this->_request->getPost('username'));
 $email=$filter->filter($this->_request->getPost('email'));
 $content=$filter->filter($this->_request->getPost('content'));
 $title=$filter->filter($this->_request->getPost('title'));
 $messageid=$filter->filter($this->_request->getPost('messageid'));
 $headimg=$filter->filter($this->_request->getPost('headimg'));
 $message=new Message();
 $db=$message->getAdapter();
 if($username!=''&&$email!=''&&$messageid!=''&&$content!=''){
 require_once 'Zend/Validate/EmailAddress.php';
 $validator = new Zend_Validate_EmailAddress();
 if ($validator->isValid($email)) {
 //取IP地址..这里只是简单取IP
 $IP=$_SERVER ["REMOTE_ADDR"];
 $data=array(
 'title'=>$title,
 'author'=>$username,
  'pid'=>$messageid,
 'headimg'=>$headimg,
 'email'=>$email,
 'show'=>'1',
 'content'=>$content,
  'ip'=>$IP,
 'addtime'=>time(),
 'updatetime'=>time()
 );
 $message->insert($data);
 $db->lastInsertId();
 unset($data);
  //取到所有留言getAllMessage,getAllReMessage
  //二个方法在Model(Message.php)里定义的
  $this->view->messages=$message->getAllMessage();
 //取到所有回复数据
 $this->view->arrReviews=$message->getAllReMessage();
 $this->view->flag='0';
 $this->view->message='您的留言发表成功!';
 echo $this->view->render('message/message.phtml');
 } else {
 $this->view->flag='5';
 $this->view->message='对不起!您填写有电子邮箱地址有误!';
 echo $this->view->render('message/message.phtml');
 }
  }elseif($username==''){
  $this->view->flag='1';
 $this->view->message='对不起!您的大名不能为空!';
  echo $this->view->render('message/message.phtml');
 }elseif($messageid==''){
  $this->view->flag='2';
 $this->view->message='对不起!回复留言编号不能为空!';
  echo $this->view->render('message/message.phtml');
 }elseif($content==''){
  $this->view->flag='3';
 $this->view->message='对不起!您填写的留言内容不能为空!';
  echo $this->view->render('message/message.phtml');
  }
  }else{
  echo $this->view->render('message/index.phtml');
  }
}

只是没有验证码以及分页功能..后面一篇会有教程进一步讲解.

总结:到这里就完成了一个留言本的编写.当然很简单的功能..还是那句话.我只是把我会的写给大家..只是一个思想..我也只会这些..所以写的好与不好..请大家自己进行权衡

完整实例代码点击此处本站下载。

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Windows下安装Memcached的步骤说明
Apr 25 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 #PHP
Zend Framework分页类用法详解
Mar 22 #PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 #PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 #PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 #PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 #PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 #PHP
You might like
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP count()函数讲解
2019/02/03 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python实现字符串加密成纯数字
2019/03/19 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python实现猜数字游戏
2020/03/25 Python
python实现批量文件重命名
2019/10/31 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
音乐学个人的自荐书范文
2013/11/26 职场文书
安全教育培训制度
2015/08/06 职场文书