Zendframework

Zendframework
php

安裝步驟:css

1. 從  Zend Framework 的網頁上下載最新版本。解壓後,把整個目錄拷貝到一個理想的地html

方,假設咱們解壓存放在D:/web/ library/Zend.mysql

2. 打開PHP.INI 文件  修改配置文件,以上面的配置爲例,php.ini 中應有相似下面的條目:linux

linux  環境下  爲  :  include_path = ".:/web/library"web

windows環境下爲  :include_path = ".;D:\ web \library"sql

查看extension=php_pdo.dll前面是否有‘;’,若是有就把‘;’刪除,這個目的是讓php數據庫

支持pdo擴展  (後期咱們須要使用它來操做數據庫)apache

3. 修改apache 中的httpd.conf 配置文件  開啓重寫模塊支持windows

LoadModule rewrite_module modules/mod_rewrite.so

把allowoverride none 修改成  all

<Directory />

Options FollowSymLinks

AllowOverride all

Order deny,allow

Deny from all

</Directory>

4. 新建.htaccess文件  保存在web目錄  寫上代碼

RewriteEngine on

#RewriteRule .* index.php

RewriteRule !\.(js|gif|jpg|png|swf|pdf|css|html|htm|rar|zip)$ index.php [NC,L]

php_flag magic_quotes_gpc off

php_flag register_globals off

5. 到目前爲止,zendframework已經配置完畢

如今咱們來了解下zendframework 項目的目錄結構

認識web目錄結構

web

application

config(系統配置文件)

config.ini

controllers(系統控制文件-)

models(模型文件-一些類文件)

views(存放視圖文件-模板文件)

scripts

index

helpers

filters

library(存放zend文件)

public (存放公共文件)

index.php

.htaccess

若是是多目錄好比有前臺後後臺,假設前臺爲default ,後臺爲admin

那麼目錄結構能夠修改成:

web

application

config(系統配置文件)

config.ini

modules

admin

controllers  (系統控制文件-)

models

views

scripts

default

controllers  (系統控制文件-)

models

views

scripts

models(模型文件-一些類文件)

library(存放zend文件)

public (存放公共文件)

index.php

.htaccess

如今咱們來看下如何使用zendframework來工做

1.首先創建一個index.php 引導程序  文件

代碼爲:

<?php

require_once "Zend/Loader/Autoloader.php"; //載入zend框架

Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true); //靜態載入自動類文件

$filepath = '.' .PATH_SEPARATOR .'./web/models/'.PATH_SEPARATOR .'./library'.PATH_SEPARATOR .

get_include_path();

set_include_path($filepath);

//視圖文件設置

$registry = Zend_Registry::getInstance();

$view = new Zend_View();

$view->setScriptPath('./web/views/scripts/');//設置模板顯示路徑,

$registry['view'] = $view;//註冊View

//設置視圖路徑  ,若是是多目錄

/*

$view->setScriptPath(

array(

'default' =>'./web/modules/default/views/scripts/',

'admin' =>'./web/modules/admin/views/scripts/'

)

);

*/

//配置數據庫參數,並鏈接數據庫,若是須要數據庫

/*

$config=new Zend_Config_Ini('./web/config/config.ini',null, true);

Zend_Registry::set('config',$config);

$dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config

->toArray());

$dbAdapter->query('SET NAMES UTF8');

Zend_Db_Table::setDefaultAdapter($dbAdapter);

Zend_Registry::set('dbAdapter',$dbAdapter);

*/

//設置控制器

$frontController =Zend_Controller_Front::getInstance();

$frontController->addModuleDirectory('./web/controllers ');

$frontController->setBaseUrl('/')//設置基本路徑

->setParam('noViewRenderer', true)

->setControllerDirectory('./web/ controllers')

->setParam('useDefaultControllerAlways', true)

->setParam('noErrorHandler', true)

->throwExceptions(true)

->dispatch();

//多目錄設置

/*    

$frontController->setControllerDirectory(

array(

'default' => './web/modules/default/controllers',

'admin' => './web/modules/admin/controllers'

)

);      

*/        

?>

2.在目錄  application/controllers/  下創建文件  名稱爲:IndexController.php  動做控制器

默認的動做控制器(Action Controller)

Zend Framework 的默認路由規則是  http://域名/控制器名/動做(方法)名。例如:

http://example.com/user/show 會被解析到名爲  User 的控制器以及該控制器中定義的

show 方法。若是該方法沒有定義,則默認轉到  index  方法。

注意:在代碼中,控制器名的後面要加上  Controller,而動做名的後面要加上  Action

代碼爲:

<?php

//require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action

{

function init()

{

$this->registry = Zend_Registry::getInstance();

$this->view = $this->registry['view'];

$this->view->baseUrl = $this->_request->getBaseUrl();

}

function indexAction()

{

$welcome = "歡迎你進入PHP高級開發系列教程-ZENDFRAMEWORK";

$this->view->welcome = $welcome;

echo $this->view->render('index/index.html');

}

}

?>

3.在application/views/scripts/index  下創建文件,名稱爲  index.html  的視圖(頁面)腳本

代碼爲:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title><?=$this->welcome?></title>

<style>

div{ background-color:#f1f1f1; border:1px solid #CCCCCC; text-align:center; line-height:40px;

width:300px; margin:50px auto;}

</style>

</head>

<body>

<div>

<?=$this->welcome?>

</div>

</body>

</html>

4.創建錯誤控制文件

默認狀況下,Zend Framework 的錯誤處理插件是被註冊的。它須要一個錯誤控制器來處理

錯誤。缺省的錯誤控制處理被假定爲  ErrorController 以及其中定義的  errorAction。

編輯  application/controllers/ErrorController.php,輸入:

<?php

/** Zend_Controller_Action */

require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action

{

public function errorAction()

{

}

}

5.下面是對應的視圖腳本。編輯  application/views/scripts/error/error.phtml,輸入:

<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0

Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>錯誤</title>

</head>

<body>

<h1>錯誤</h1>

</body>

</html>

6.運行

好,如今運行網站。在瀏覽器中鍵入下面三個地址,獲得的結果應該是同樣的——就是最最

常見的「Hello, World!「。

http://域名

http://域名/index

http://域名/index/index

若是是這樣,那麼恭喜你  以上就是zendframework的配置過程

下面咱們將要來學習zendframework 數據庫鏈接操做,多目錄的操做。

Zendframework--------數據庫操做

如今咱們回頭看下入口文件index.php

裏面有段代碼咱們以前註釋掉的

//配置數據庫參數,並鏈接數據庫,若是須要數據庫

/*

$config=new Zend_Config_Ini('./web/config/config.ini',null, true);

Zend_Registry::set('config',$config);

$dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config

->toArray());

$dbAdapter->query('SET NAMES UTF8');

Zend_Db_Table::setDefaultAdapter($dbAdapter);

Zend_Registry::set('dbAdapter',$dbAdapter);

*/

如今咱們要把這段代碼註釋去掉

咱們須要在web/config/下創建一個文件  爲  config.ini

並在裏面寫入代碼

[general]

db.adapter=PDO_MYSQL

db.config.host =localhost

db.config.username =root

db.config.password= 123456

db.config.dbname=zend

PDO_mysql爲數據庫操做對象

db.config.host   爲數據庫主機

db.config.username   爲數據庫用戶名

db.config.password   爲數據庫密碼

db.config.dbname   爲須要操做的數據庫

數據庫文件配置寫完,如今來看下數據的操做

咱們已經建立了MVC中的V和C,如今咱們就開始建立M

在數據庫中建立一個表  zend

id 爲主鍵,自動增加

dbAdapter  類型操做數據

在indexController.php    init(方法中增長代碼)

//數據庫dbAdapter操做

$this->db = $this->registry['dbAdapter'];

同時新增mysqlAction方法

Function mysqlAction(){

}

你能夠經過瀏覽器開始訪問這個方法:http://域名/index/mysql

1.CODE:

//添加引號防止數據庫***

//第一種是quote() 方法. 該方法會根據數據庫adapter爲標量加上 合適的引號;

假如你試圖對一個數組作quote操做, 它將爲數組中 每一個元素加上引號,並用","分隔返回

$db = $this->db;

// 爲標量加引號

$value = $db->quote('St John"s Wort');

//$value 如今變成了 '"St John\"s Wort"' (注意兩邊的引號)

echo $value;

2.CODE

// 爲數組加引號

$value = $db->quote(array('a', 'b', 'c'));

// $value 如今變成了 '"a", "b", "c"' (","分隔的字符串)

print_r($value);

3.CODE:

//第二種是 quoteInto() 方法. 你提供一個包含問號佔 位符的基礎字符串 , 然

後在該位置加入帶引號的標量或者數組. 該 方法對於隨需構建查詢sql語句和條件語句是

頗有幫助的. 使用 quoteInto處理過的標量和數組返回結果與quote() 方法相同

// 在where語句中爲標量加上引號

$where = $db->quoteInto('id = ?', 1);

// $where 如今爲 'id = "1"' (注意兩邊的引號)

Echo $where;

4.CODE:

// 在where語句中爲數組加上引號

$where = $db->quoteInto('id IN(?)', array(1, 2, 3));

// $where 如今爲 'id IN("1", "2", "3")' (一個逗號分隔的字符串)

Echo $where;

5.CODE:

//直接查詢

// 使用完整的sql語句直接進行查詢.

$sql = $db->quoteInto(

'SELECT * FROM zend WHERE id > ?',

'1'

);

$result = $db->query($sql);

// 使用PDOStatement對象$result將全部結果數據放到一個數組中

$rows = $result->fetchAll();

print_r($rows);

6.CODE:

//你能夠將數據自動的綁定到你的查詢中。這意味着你在查詢中能夠設定 多個指定的

佔位符,而後傳送一個數組數據以代替這些佔位符。這些替 換的數據是自動進行加引號處

理的,爲防止數據庫***提供了更強的安 全性

$result = $db->query(

'SELECT * FROM zend WHERE id > :placeholder',

array('placeholder' => '1')

);

// 使用PDOStatement對象$result將全部結果數據放到一個數組中

$rows = $result->fetchAll();

print_r($rows);

7.CODE:

//你也能夠手工設置sql語句和綁定數據到sql語句。這一功能經過 prepare() 方

法獲得一個設定好的PDOStatement對象,以便直 接進行數據庫操做.

// 此次, 設定一個 PDOStatement 對象進行手工綁定.

$stmt = $db->prepare('SELECT * FROM zend WHERE id > :placeholder');

$stmt->bindValue('placeholder', '3');

$stmt->execute();

// 使用PDOStatement對象$result將全部結果數據放到一個數組中

$rows = $stmt->fetchAll();

print_r($rows);

8:CODE

//插入數據

//可使用 insert()方法將要插入的數據綁定並建立 一個insert語句(綁定的數

據是自動進行加引號處理以免數據庫***的)

//返回值並 不是 最後插入的數據的id,這樣作的緣由在於一些表 並無一個自增

的字段;相反的,這個插入的返回值是改變的數據行數(一般狀況爲1)。 假如你須要最後插入

的數據id,能夠在insert執行後調用 lastInsertId() 方法。

//

// INSERT INTO zend

// (username)

// VALUES ('123123');

//

// 以"列名"=>"數據"的格式格式構造插入數組,插入數據行

$row = array (

'username'  => time(),

);

// 插入數據的數據表

$table = 'zend';

// i插入數據行並返回行數

$rows_affected = $db->insert($table, $row);

$last_insert_id = $db->lastInsertId();

echo $last_insert_id;

9:CODE

//更新數據

//可使用 update() 方法肯定須要update的數據而且建立一個 update語句(確

定的數據是自動加引號處理以免數據庫***的)。

//你能夠提供一個可選的where語句說明update的條件(注意:where語句並 不是

一個綁定參數,因此你須要本身數據進行加引號的操做)。

//

// UPDATE zend

// SET username = "zppx"

// WHERE id = "20";

//

// 以"列名"=>"數據"的格式構造更新數組,更新數據行

$set = array (

'username' => 'zppx',

);

// 更新的數據表

$table = 'zend';

// where語句

$where = $db->quoteInto('id = ?', '20');

// 更新表數據,返回更新的行數

$rows_affected = $db->update($table, $set, $where);

10:CODE

//刪除數據

//可使用 delete() 方法建立一個delete語句;你 也能夠提供一個where語句

以說明數據的刪除條件。(注意:where語句並非一個綁 定參數,因此你須要本身進行數據

加引號處理)。

//

// 須要刪除數據的表

// WHERE username = "zppx";

//

// 建立一個 $db對象, 而後...

// 設定須要刪除數據的表

$table = 'zend';

// where條件語句

$where = $db->quoteInto('username = ?', 'zppx');

// 刪除數據並獲得影響的行數

$rows_affected = $db->delete($table, $where);

11:CODE

//取回查詢結果

//可使用query()方法直接對數據庫進行操做,可是一般狀況 下,仍然仍是須要

選擇數據行並返回結果。以fetch開頭的一系列的 方法能夠實現這個要求。對於每一種 fetch

系列 的方法來講,你需 要傳送一個select的sql語句;假如你在操做語句中使用指定的佔位

符,你也能夠 傳送一個綁定數據的數組對你的操做語句進行處理和替換。 Fetch系列 的方法

包括

//fetchAll()

// 取回結果集中全部字段的值,做爲連續數組返回

$result = $db->fetchAll(

"SELECT * FROM zend WHERE username = :title",

array('title' => 'zppx')

);

//fetchAssoc()

// 取回結果集中全部字段的值,做爲關聯數組返回

// 第一個字段做爲碼

$result = $db->fetchAssoc(

"SELECT * FROM zend WHERE username = :title",

array('title' => 'zppx')

);

//fetchCol()

// 取回全部結果行的第一個字段名

$result = $db->fetchCol(

"SELECT username FROM round_table WHERE username = :title",

array('title' => 'zppx')

);

//fetchOne()

// 只取回第一個字段值

$result = $db->fetchOne(

"SELECT COUNT(*) FROM zend WHERE username = :title",

array('title' => 'zppx')

);

//fetchPairs()

// 取回一個相關數組,第一個字段值爲碼

// 第二個字段爲值

$result = $db->fetchPairs(

"SELECT username, id FROM zend WHERE username = :title",

array('title' => 'zppx')

);

//fetchRow()

// 只取回結果集的第一行

$result = $db->fetchRow(

"SELECT * FROM zend WHERE username = :name",

array('name' => 'zppx')

);

以上都是在控制文件中操做的,如今咱們來看下在models中是如何操做數據庫的

咱們在models中新建一個文件 名稱爲:Zenduser.php

代碼爲:

class Zenduser extends Zend_Db_Table

{

protected $_name ="zend"; // 默認表爲'class_name'你能夠經過這個參數修改

protected $_primary = 'id';//默認主鍵  爲’id’ 你能夠經過這個參數修改

function init() {

$this->_db = $this->getAdapter();//獲取數據庫操做

parent::init();

}

}

注意:類名稱和文件名稱保持一致

在indexController.php文件中增長一個方法,modelAction

Function modelAction(){

}

你能夠經過瀏覽器開始訪問這個方法:http://域名/index/mysql

如今咱們來完善這個方法,經過代碼來了解

$db = $this->db;

$Zenduser = new Zenduser();

//若是是直接調用models中的類成員,則新加數據 只須要將列名:數據的關聯數組做爲參數,

調 用insert()方法便可.(zend framework)會自動對數據進行加引號處理, 並返回插入的

最後一行的id值

//插入

// INSERT INTO zend

// (username)

// VALUES ("zppx")

$data = array(

'username' => 'zppx'

);

$id = $Zenduser->insert($data);

echo $id;

//更新數據

//要修改表中的任意行數據,咱們能夠設定一個列名:數據的關聯數組做爲參數,調

用update()方法,同是經過一個where條件從句來決定須要改變的行.該方法將會 修改表中數

據並返回被修改的行數.

// UPDATE zend

// SET username = "szzppx"

// WHERE id = "23"

$set = array(

'username' => 'szzppx',

);

$where = $db->quoteInto('id = ?', '23');

$rows_affected = $Zenduser->update($set, $where);

//刪除數據

//要刪除表中的數據,咱們能夠調用delete()方法,同時經過一個where條件 分句

來決定須要刪除的行.該方法將會返回被刪除的行數

//(zend framework)不會對條件分句進行加引號處理,因此你須要使用該表 的

zend_db_adapter對象完成該工做.

// DELETE FROM zend

// WHERE username = "szzppx"

//

$where = $db->quoteInto('username = ?', 'szzppx');

$rows_affected = $Zenduser->delete($where);

//根據主鍵查找數據

//經過調用find()方法,可使用主鍵值輕鬆地在表中檢索數據.假如你只想要查詢

某 一條數據,該方法將回返回一個zend_db_table_row對象,而當你想要查詢多條記錄時 ,

將會返回一個zend_db_table_rowset對象

// SELECT * FROM zend WHERE id = "1"

$row = $Zenduser->find(1);

// SELECT * FROM zend WHERE id IN("1", "2", 3")

$rowset = $Zenduser->find(array(1, 2, 3));

//取回一條記錄,不按主鍵

// SELECT * FROM zend

// WHERE username = "zppx"

// AND sex = "1"

// ORDER BY id desc

$where = $db->quoteInto('username = ?', 'zppx')

. $db->quoteInto('AND sex = ?', '1');

$order = 'id';

$row = $Zenduser->fetchRow($where, $order);

//取回多條記錄

//假如須要一次檢索多條記錄.可使用fetchAll()方法.和使用fetchRow()方

法類 似,該方法不只僅能夠設定where和order分句,也能夠設定limit-count和

limit-offset值來限制返回的結果數.執行該方法後,把選擇的結果做爲一個

Zend_Db_Table_Rowset對象返回.

//注意,(zend framework) 將不會對where語句進行加引號處理,因此你須要 通

過zend_db_adapter進行數據處理

// SELECT * FROM zend

// WHERE username = "zppx"

// ORDER BY id

// LIMIT 10 OFFSET 20

$where = $db->quoteInto('username = ?', 'zppx');

$order = 'id';

$count = 10;

$offset = 20;

$rowset = $Zenduser->fetchAll($where, $order, $count, $offset);

如今咱們來看下如何在models中如何操做數據庫代碼

在Zenduser.php中增長一個方法

function inserDate(){

//查詢

$result = $this->_db->fetchPairs(

"SELECT username, id FROM zend WHERE username = :title",

array('title' => 'zppx')

);

print_r($result);

}

咱們繼續完善控制文件

增長代碼

$Zenduser->inserDate();

咱們就能夠看到執行的結果

相關文章
相關標籤/搜索