3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
在ZendFramework中,可以將每張資料表的控制寫成Model,這樣的好處是可以讓Controller更為乾淨,也可以避免直接撰寫sql語法 如果透過zf tools建立整個流程會方便許多,以下範例皆是利用zf tools建立 0.資料庫schema及預設資料 CREATE TABLE IF NOT EXISTS `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `status` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `admin` (`id`, `account`, `password`, `status`) VALUES (1, 'johnson', 'root123', 1); 1.資料庫設定 利用zf tools建立 #可以將production換成其他群組,例如:development、testing zf configure db-adapter 'adapter=PDO_MYSQL&dbname="test"&host="localhost"&username="root"&password="123"' production 完成後應該可以看到application/configs/application.ini resources.db.adapter = "PDO_MYSQL" resources.db.params.dbname = "test" resources.db.params.host = "localhost" resources.db.params.username = "root" resources.db.params.password = "123" ;這行必須手動加進去,將語系設成utf8 resources.db.params.driver_options.1002 = "SET NAMES utf8" 2.建立Table物件 利用zf tools建立 #Admin為Table物件名稱,admin為資料表名稱 zf create db-table Admin admin 如果成功在application/models/DbTable會建立出一個Admin.php,並會有以下內容 class Application_Model_DbTable_Admin extends Zend_Db_Table_Abstract { protected $_name = 'admin'; } 3.建立Table Row Model 利用zf tools建立 zf create model AdminRow 成功的話路徑會是application/models/AdminRow.php,Row Model主要定義Row的資料和控制方法 class Application_Model_AdminRow { protected _id; protected _account; protected _password; protected _status; public function __construct(options = null) { if (is_array(options)) { this->setOptions(options); } } public function __set(name, value) { method = 'set' . ucfirst(name); if (!method_exists(this, method)) { throw new Exception('Invalid property'); } this->method(value); } public function __get(name) { method = 'get' . ucfirst(name); if (!method_exists(this, method)) { throw new Exception('Invalid property'); } return this->method(); } public function setOptions(options) { methods = get_class_methods(this); foreach (options as key => value) { method = 'set' . ucfirst(key); if (in_array(method, methods)) { this->method(value); } } return this; } public function setId(id) { this->_id = id; return this; } public function setAccount(account) { this->_account = account; return this; } public function setPassword(password) { this->_password = password; return this; } public function setStatus(status) { this->_status = status; return this; } public function getId() { return this->_id; } public function getAccount() { return this->_account; } public function getPassword() { return this->_password; } public function getStatus() { return this->_status; } } 4.建立Table Mapper 利用zf tools建立 zf create model AdminMapper 成功的話路徑會是application/models/AdminMapper.php 在開發時主要使用此物件操作資料表,因此這個物件的方法就是隨著操作資料庫的需求自行撰寫 class Application_Model_AdminMapper { protected _dbTable; //設定資料表物件 public function setDbTable(dbTable) { if (is_string(dbTable)) { dbTable = new dbTable(); } if (!dbTable instanceof Zend_Db_Table_Abstract) { throw new Exception('Invalid table data gateway provided'); } this->_dbTable = dbTable; return this; } //取得資料表物件 public function getDbTable() { if (null === this->_dbTable) { this->setDbTable('Application_Model_DbTable_Admin'); } return this->_dbTable; } //Insert and Update public function save(admin) { data = array( 'id' => admin->getId(), 'account' => admin->getAccount(), 'password' => admin->getPassword(), 'status' => admin->getStatus(), ); foreach (data as key => val) { if (null === val) { unset(data[key]); } } if (null === (id = admin->getId())) { this->getDbTable()->insert(data); } else { this->getDbTable()->update(data, array('id = ?' => id)); } } //find ID(Primary Key) public function find(id) { result = this->getDbTable()->find(id); if (0 == count(result)) { return; } row = result->current(); admin = new Application_Model_AdminRow(); admin->setId(row->id) ->setAccount(row->account) ->setPassword(row->password) ->setStatus(row->status); return admin; } //Search Account public function searchAccount(account) { if (null === account) { return ; } select = this->getDbTable()->select()->where("account = ?",account); return this->fetchAll(select); } public function fetchAll(select = null) { //如果只抓單筆可以使用fetchRow(select) resultSet = this->getDbTable()->fetchAll(select); entries = array(); foreach (resultSet as row) { entry = new Application_Model_AdminRow(); entry->setId(row->id) ->setAccount(row->account) ->setPassword(row->password) ->setStatus(row->status); entries[] = entry; } return $entries; } } 5.測試 在Controller中就可以測試是否成功連結 table_admin = new Application_Model_AdminMapper(); //Insert options = array( 'account' => '這只是測試', 'password' => '123', 'status' => '2' ); table_admin->save(new Application_Model_AdminRow(options)); //Update options = array( 'id' => '2', 'password' => '456', ); table_admin->save(new Application_Model_AdminRow(options)); //SearchName print_r(table_admin->searchAccount('Hello')); //find print_r(table_admin->find(1)); //All print_r(result = $table_admin->fetchAll()); Categories: ZendFramework 分類 Android AngularJS Chrome Database MySQL DataStructure Editor Vim Firefox Git Hadoop Language Go Java JavaScript jQuery jQueryChart Node.js Vue PHP Laravel ZendFramework Python Mac Network Cisco DLink Juniper Oauth Server Apache Share Unix FreeBSD Linux WebDesign Bootstrap CSS HTML Wordpress Search 搜尋:

本文由blogjohnsonluorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦