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 相关文章推荐
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
PHP生成带有雪花背景的验证码
Sep 28 PHP
PHP中uploaded_files函数使用方法详解
Mar 09 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
php使用curl存储cookie的示例
Mar 31 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 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读取IMAP邮件
2006/10/09 PHP
PHP4实际应用经验篇(1)
2006/10/09 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
寒假实习自荐信
2014/01/26 职场文书
市场部经理岗位职责
2014/04/10 职场文书
植树节口号
2014/06/21 职场文书
签字仪式主持词
2015/07/03 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
无线电通信名词解释
2022/02/18 无线电