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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
php之Memcache学习笔记
Jun 17 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
php中define用法实例
Jul 30 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
如何在PHP中生成随机数
Jun 04 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php whois查询API制作方法
2011/06/23 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解Python中find()方法的使用
2015/05/18 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
如何设置Java的运行环境
2013/04/05 面试题
2014年单位植树节活动方案
2014/03/23 职场文书
建房协议书
2014/04/11 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL