ZendFramework2连接数据库操作实例


Posted in PHP onApril 18, 2017

本文实例讲述了ZendFramework2连接数据库操作。分享给大家供大家参考,具体如下:

相对于zf1,来说,zf2让我们对于数据库这方面的操作我的个人感觉是对于字段起别名简单了,但是对数据库的操作虽然配置写好的就基本不需要动了,但是还是比1的配置要繁琐,

还是那句话,大家可以去看看源码。。。

Module.php 里面添加

public function getServiceConfig()
{
    return array(
      'factories' => array(
        'Student\Model\StudentTable' => function($sm) {
          $tableGateway = $sm->get('StudentTableGateway');
          $table = new StudentTable($tableGateway);
          return $table;
        },
        'StudentTableGateway' => function ($sm) {
          $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
          $resultSetPrototype = new ResultSet();
          $resultSetPrototype->setArrayObjectPrototype(new Student());
          return new TableGateway('cc_user', $dbAdapter, null, $resultSetPrototype);//table Name is cc_user
        },
      ),
    );
}

student.php 这个是Model/Student.php

namespace Student\Model;
class Student
{
  public $id;
  public $name;
  public $phone;
  public $mark;
  public $email;
  public function exchangeArray($data)//别名
  {
    $this->id   = (!empty($data['cc_u_id'])) ? $data['cc_u_id'] : null;
    $this->name = (!empty($data['cc_u_name'])) ? $data['cc_u_name'] : null;
    $this->phone = (!empty($data['cc_u_phone'])) ? $data['cc_u_phone'] : null;
    $this->mark = (!empty($data['cc_u_mark'])) ? $data['cc_u_mark'] : null;
    $this->email = (!empty($data['cc_u_email'])) ? $data['cc_u_email'] : null;
  }
}

StudentTable.php Model/StudentTable.php

<?php
namespace Student\Model;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Sql\Select;
use Zend\Paginator\Adapter\DbSelect;
use Zend\Paginator\Paginator;
class StudentTable
{
  protected $tableGateway;
  protected $table='cc_user';
  public function __construct(TableGateway $tableGateway)
  {
    $this->tableGateway = $tableGateway;
  }
  public function fetchAll($paginated)
  {//分页
     if($paginated) {
      // create a new Select object for the table album
      $select = new Select('cc_user');
      // create a new result set based on the Student entity
      $resultSetPrototype = new ResultSet();
      $resultSetPrototype->setArrayObjectPrototype(new Student());
      // create a new pagination adapter object
      $paginatorAdapter = new DbSelect(
        // our configured select object
        $select,
        // the adapter to run it against
        $this->tableGateway->getAdapter(),
        // the result set to hydrate
        $resultSetPrototype
      );
      $paginator = new Paginator($paginatorAdapter);
      return $paginator;
    }
    $resultSet = $this->tableGateway->select();
    return $resultSet;
  }
  public function getStudent($id)
  {
    $id = (int) $id;
    $rowset = $this->tableGateway->select(array('id' => $id));
    $row = $rowset->current();
    if (!$row) {
      throw new \Exception("Could not find row $id");
    }
    return $row;
  }
  public function deleteStudent($id)
  {
    $this->tableGateway->delete(array('id' => $id));
  }
  public function getLIValue(){
    return $this->tableGateway->getLastInsertValue();
  }
}

Student/IndexController.php 调用数据库

public function indexAction(){
    /* return new ViewModel(array(
      'students' => $this->getStudentTable()->fetchAll(), //不分页
    ));*/
    $page=$this->params('page');//走分页 在model.config.php里面设置:
/*model.config.php
'defaults' => array(
 'controller' => 'Student\Controller\Index',
 'action'   => 'index',
 'page'=>'1',
),
*/
    $paginator = $this->getStudentTable()->fetchAll(true);
    // set the current page to what has been passed in query string, or to 1 if none set
    $paginator->setCurrentPageNumber((int)$this->params()->fromQuery('page', $page));
    // set the number of items per page to 10
    $paginator->setItemCountPerPage(10);
    return new ViewModel(array(
      'paginator' => $paginator //模板页面调用的时候的名字
    ));
  //print_r($this->getStudentTable()->fetchAll());
}

在模板页面的调用

<?php foreach ($this->paginator as $student) : ?>
<tr id="<?php echo $this->escapeHtml($student->id);?>">
  <td><?php echo $this->escapeHtml($student->id);?></td>
  <td><?php echo $this->escapeHtml($student->name);?></td>
  <td><?php echo $this->escapeHtml($student->phone);?></td>
  <td><?php echo $this->escapeHtml($student->email);?></td>//应用了在Student.php的别名
  <td><?php echo $this->escapeHtml($student->mark);?></td>
    <td><a href='#'  class='icol-bandaid editUserInfo'></a>  
      <a href='#' class='icol-key changePwd'></a>  
      <a herf='#'  class='icol-cross deleteStud'></a>
    </td>
  </tr>
<?php endforeach;?>

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

PHP 相关文章推荐
十天学会php之第四天
Oct 09 PHP
PHP脚本数据库功能详解(上)
Oct 09 PHP
php array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
php常用文件操作函数汇总
Nov 22 PHP
php实现多城市切换特效
Aug 09 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
php 原生分页
Apr 01 PHP
PHP实现的数独求解问题示例
Apr 18 #PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 #PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 #PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 #PHP
PHP递归删除多维数组中的某个值
Apr 17 #PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 #PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 #PHP
You might like
967 个函式
2006/10/09 PHP
php调用mysql存储过程
2007/02/14 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
Use Word to Search for Files
2007/06/15 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
js实现放大镜特效
2017/05/18 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
安全生产先进个人材料
2014/02/06 职场文书
安全生产工作汇报
2014/10/28 职场文书
先进班集体申报材料
2014/12/26 职场文书
党支部工作总结2015
2015/04/01 职场文书
总账会计岗位职责
2015/04/02 职场文书
2019军训心得体会
2019/06/27 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技