模型是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章 結束語