模型是ZF2对数据库操作的核心内容,也是进行数据过滤、数据交换的功能专区。
### 7.5.1 添加 Album.php
此文件包括数据交换、表单数据过滤功能;添加 `/module/Album/src/Album/Model/Album.php` 内容如下:
~~~
namespace Album\Model;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
class Album implements InputFilterAwareInterface {
public $id;
public $artist;
public $title;
protected $inputFilter;
public function exchangeArray($data){
$this->id = (isset($data['id'])) ? $data['id'] : null;
$this->artist = (isset($data['artist'])) ? $data['artist'] : null;
$this->title = (isset($data['title'])) ? $data['title'] : null;
}
public function getArrayCopy(){
return get_object_vars($this);
}
public function getInputFilter() {
if(!$this->inputFilter){
$this->inputFilter = new InputFilter();
$factory = new InputFactory();
$this->inputFilter->add($factory->createInput(array(
'name'=>'id',
'required'=>true,
'filters'=>array(
array('name'=>'Int'),
),
)));
$this->inputFilter->add($factory->createInput(array(
'name'=>'artist',
'required'=>true,
'filters'=>array(
array('name'=>'StripTags'),
array('name'=>'StringTrim'),
),
'validators'=>array(
array(
'name'=>'StringLength',
'options'=>array(
'encoding'=>'UTF-8',
'min'=>5,
'max'=>100,
),
),
),
)));
$this->inputFilter->add($factory->createInput(array(
'name'=>'title',
'required'=>true,
'filters'=>array(
array('name'=>'StripTags'),
array('name'=>'StringTrim'),
),
'validators'=>array(
array(
'name'=>'StringLength',
'options'=>array(
'encoding'=>'UTF-8',
'min'=>5,
'max'=>100,
),
),
),
)));
}
return $this->inputFilter;
}
public function setInputFilter(InputFilterInterface $inputFilter) {
throw new \Exception('Not used');
}
}
~~~
代码解释:
public function exchangeArray($data){} 数据转换
public function getArrayCopy(){} 克隆对象内属性
public function getInputFilter() {} 过滤器
### 7.5.2 添加AlbumTable.php
此文件为数据库操作网关,实现对数据库的一系列操作;添加文件:`/module/Album/src/Album/Model/AlbumTable.php`,具体内容如下:
~~~
namespace Album\Model;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\Sql\Select;
use Zend\Paginator\Adapter\DbSelect;
use Zend\Paginator\Paginator;
class AlbumTable {
protected $tableGateway;
public function __construct(TableGateway $tg)
{
$this->tableGateway = $tg;
}
public function fetchAll($paginated=false)
{
if($paginated){// 分页
$select = new Select('album');
$rs = new ResultSet();
$rs->setArrayObjectPrototype(new Album());
$pageAdapter = new DbSelect($select,$this->tableGateway->getAdapter(),$rs);
$paginator = new Paginator($pageAdapter);
return $paginator;
}
$resultSet = $this->tableGateway->select();
return $resultSet;
}
public function getAlbum($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 saveAlbum(Album $album)
{
$data = array(
'artist' =>$album->artist,
'title' =>$album->title
);
$id = (int) $album->id;
if($id == 0){
$this->tableGateway->insert($data);
}else{
if($this->getAlbum($id)){
$this->tableGateway->update($data,array('id'=>$id));
}else{
throw new \Exception("Could not find row {$id}");
}
}
}
public function deleteAlbum($id)
{
$this->tableGateway->delete(array('id'=>$id));
}
}
~~~
代码解释:
public function fetchAll($paginated=false){} 获取数据表中的所有记录
public function getAlbum($id){} 获取指定ID的记录行
public function saveAlbum(Album $album){} 保存数据到数据库
public function deleteAlbum($id){} 删除指定ID的记录行
- 序言
- 第1章 Zend Framework2 简介
- 1.1 Zend Framework2 简介
- 1.2 下载安装
- 1.3 搭建开发环境
- 第2章 创建ZF2项目
- 2.1 新建一个项目
- 2.2 配置网站
- 2.3 伪静态 .htaccess文件
- 2.4 添加启动/入口文件
- 2.5 添加全局配置文件
- 2.6 添加自动加载文件 init_autoloader.php
- 2.7 IndexController 控制器
- 第3章 创建模块文件
- 3.1 Module 文件
- 3.2 module.config 文件
- 3.2.1 router 路由配置
- 3.2.2 controllers控制器配置
- 3.2.3 view_manager 视图管理器
- 3.2.4 service_manager 服务管理器
- 3.2.5 translator 翻译器
- 3.2.6 navigation 导航条
- 第4章 创建控制器
- 4.1 控制器简介
- 4.2 新建控制器
- 4.3 添加控制器的Action
- 第5章 创建视图模板
- 5.1 创建模板
- 5.2 模板配置
- 5.3 编写布局和错误异常模板
- 5.4 编写Action 对应的模板文件
- 5.5 访问 IndexAction
- 第6章 创建模型
- 6.1 ORM 对象映射法
- 6.2 使用分页导航
- 6.3 自定模型
- 6.4 章节总结
- 第7章 实例应用
- 7.1 建立Album 模块
- 7.2 添加模块文件
- 7.3 添加模块配置文件
- 7.4 创建数据表 album
- 7.5 添加模型文件
- 7.6 添加表单 AlbumForm
- 7.7 添加控制器 AlbumController
- 7.8 添加模板文件
- 第8章 用户认证
- 8.1 建立数据表
- 8.2 新建认证类
- 8.3 引用认证类
- 第9章 结束语