最近公司接的項目需要用到Zend Framework框架,本來需要用的是ZendFramework2 ,但是由於原有代碼使用了ZendFramework1 框架,所以順帶學習了。現將一些基礎入門記錄一下,以供后用。
一. 搭建zend framework1開發環境
1. 下載框架源碼,下載后解壓到本地。
下載地址:https://packages.zendframework.com/releases/ZendFramework-1.12.9/ZendFramework-1.12.9.zip
2. 利用源碼生成project
環境准備:
(1)首先要保證自己本地環境安裝配置了Apache和PHP。 (為了方便,我使用的是 wamp)
(2)將php.exe的路徑添加到系統環境變量中。將解壓后的ZendFramework-1.12.9\bin 目錄也添加到系統環境變量中。(為了執行源碼中 zf 命令)
安裝:
運行cmd 進入apache配置的workspace目錄,(wamp就是www目錄,xampp就是htdocs目錄)
執行:(quickstart為項目名稱,可以自定義)
zf create project quickstart
結果如下:
然后看workspace文件目錄下多出一個文件夾 quickstart
目錄如下:
public 為公開目錄
application 為代碼目錄
library 為庫文件目錄
tests 為測試目錄
.zfproject.xml 為路由配置文件
3. 啟動apache,嘗試訪問index
url: http://localhost/quickstart/public/index (localhost為apache配置的域名)
系統入口文件為: quickstart\public\index.php
打開瀏覽器訪問 http://localhost/quickstart/public/index
發現報錯
這是因為我們還沒有在創建的工程目錄中添加Zend框架的核心庫文件。
4. 為project添加框架核心庫文件。
有兩種方法:
(1)在php.ini中直接包含library(好處是 多個project 可以共用一份Zend框架的核心庫文件。)
1)將ZendFramework-1.12.9\library 文件夾復制到 php安裝目錄的lib目錄下
例如:我的php安裝目錄為 C:\wamp64\bin\php\php5.6.25
那么在 C:\wamp64\bin\php\php5.6.25\lib 下創建一個Zend文件夾
將ZendFramework-1.12.9\library復制到Zend文件夾下
2)修改php.ini (如果是Wamp,那么要注意修改的是哪個php.ini,一般在apache安裝目錄C:\wamp64\bin\apache\apache2.4.23\bin下,為了保險起見,建議將C:\wamp64\bin\php\php5.6.25下的php.ini一並修改)
打開php.ini ,搜索 Windows: "\path1;\path2"
在下面添加 include_path = "c:\wamp64\bin\php\php5.6.25\lib\Zend\library"
(引號中為上述的library所復制的目錄。)
如圖:
(2) 在工程目錄project中導入library
這個方法比較簡單,只需要將 ZendFramework-1.12.9\library 文件夾覆蓋到project目錄下就可以了。
搞定之后再刷新 網頁。
出現以上畫面,恭喜你,成功了!
二. 配置使用layout 和 配置文件application.ini , .zfproject.xml 簡介。
1. 使用layout
初始安裝后的zend1框架只有初始結構,我們需要引入layout布局
運行cmd 進入project目錄,執行 zf enable layout
如圖:
然后看project目錄結構,發現多了layouts文件夾。
再次刷新網頁 http://localhost/quickstart/public/index
發現多了title和一系列東西。是不是很神奇,如果想修改layout可以去修改layouts文件夾下面的layout.phtml,關於layouts就說到這里。
2. 配置文件簡介
首先明確一點,zendframework1是標准的MVC模式的框架。
(1)application/configs/application.ini是配置文件
內容如下:
初始狀態下,包含了一些路徑的配置以及錯誤狀態碼。
這個配置分三種環境,生產環境production,開發環境development,測試環境testing。
生產環境的error_code = 0是為了不報錯,其他環境都應該設置為1。
以后要使用的數據庫配置等信息,需要添加到這個文件中。
(2)project根目錄下的.zfproject.xml是路由文件,里面配置了能夠訪問的路由信息
如圖:
我們自己添加到Controller和view都需要寫入這個文件中
controller需要寫入controllersDirectory標簽里
controllerName 為controller名 去掉后綴
actionName為action名 去掉后綴
view需要寫入viewsDirectory標簽里
forControllerName 為view所屬的controller名
forActionName 為view所屬的action名
我們需要訪問的路由信息都應該加入這個文件,不然可能會報錯404。具體見后面的mysql應用。
三. Mysql配置及增刪改查應用。
1. Mysql配置
(1)首先創建並配置數據庫
由於我使用的是wamp,所以直接用phpMyAdmin,創建一個數據庫 quickstart (名字自定義).
創建數據表
CREATE TABLE `quickstart`.`m_user` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(50) NOT NULL , PRIMARY KEY (`id`) )
插入數據
INSERT INTO `m_user` (`id`, `name`) VALUES (1, 'name1'), (2, 'name2'), (3, 'name3'),
在application.ini底部加入如下配置
[mysql] db.adapter=PDO_MYSQL db.params.host=localhost db.params.username=root db.params.password= db.params.dbname=quickstart
[mysql]名字可以自定義,后面會用到
host為數據庫服務器地址
username為數據庫服務器用戶名
password為密碼
dbname為剛才創建的數據庫名
(2)初始化數據庫適配器
一般來說需要用到數據庫的地方才需要初始化適配器,合理的做法是寫在每個控制器的init方法里,
但是這樣還是很麻煩,而且代碼冗余,因此抽象出一個BaseController控制器,將初始化數據庫適配器
放在BaseController的init()方法里,在需要使用數據庫的控制器再繼承這個新的控制器。
新建文件: controllers/BaseController.php
1 <?php 2 class BaseController extends Zend_Controller_Action 3 { 4 public function init() 5 { 6 7 $url = constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini'; 8 //這個名稱要和application.ini配置的相同,我配置的是[mysql] 9 $dbconfig = new Zend_Config_Ini($url , "mysql"); 10 $db = Zend_Db::factory( $dbconfig->db); 11 $db->query('set names utf8'); 12 Zend_Db_Table::setDefaultAdapter($db); 13 } 14 }
zend framework的控制器必須繼承Zend_Controller_Action,如果沒繼承這個類就不是控制器
(3)創建表模型 UserModel
一般來說一個表對應一個模型,模型的PHP文件應該寫在models文件夾下面
新建文件:models/UserModel.php
<?php class UserModel extends Zend_Db_Table{ protected $_name='m_user'; protected $_primary='id'; }
模型層的php也要繼承一個類Zend_Db_Table否則就不是模型,
$_name 為數據庫的表名,$_primary為表的主鍵(主鍵的默認字段就是id,如果是這種情況主鍵可以不配置)
(4)使用數據庫實現簡單查詢操作
增刪改查操作需要調用Zend_Db_Table提供的方法。
創建我們自己的控制器UserController,繼承BaseController
新建文件:UserController.php
1 <?php 2 require_once APPLICATION_PATH . '/controllers/BaseController.php'; 3 require_once APPLICATION_PATH . '/models/UserModel.php'; 4 5 class UserController extends BaseController 6 { 7 public function getUserAction() 8 { 9 $user = new UserModel(); 10 $result = $user->fetchAll()->toArray(); 11 $this->view->result = $result; 12 } 13 }
創建view
新建文件:views/scripts/user/get-user.phtml
<?php var_dump($this->result);?>
(zend框架view的命名是根據Controller里的Action名,如果Action名采用駝峰式命名,則view將相應的大寫轉小寫,並在前面加"-")
修改路由文件.zfproject.xml
在<viewScriptsDirectory>標簽里添加
<viewControllerScriptsDirectory forControllerName="User"> <viewScriptFile forActionName="getUser" /> </viewControllerScriptsDirectory>
在<controllersDirectory>標簽里添加
<controllerFile controllerName="User"> <actionMethod actionName="getUser" /> </controllerFile>
演示效果
在瀏覽器地址欄輸入 http://localhost/quickstart/public/user/get-user
(url規則為: 域名+project名+public+controller名+view名;如果將public文件夾設置為 訪問目錄,則url為: 域名+controller名+view名)
如圖能夠輸出db中的內容,則為成功。
四. 增刪改查
1.插入操作
插入數據一般需要從前台form獲取數據,然后在客戶端和服務端進行驗證check后,調用insert方法插入數據庫。
insert方法需要將待插入的數據組成一個關聯數組,key為列名,將此數組當作insert方法的參數
為了方便,就不做form,直接將數據寫在URL之中,然后在后台獲取,代碼如下:
public function insertUserAction() { // action body $user = new UserModel(); $name = $this->getRequest ()->getParam ( "name" ); $set = array ( "name" => $name ); $user->insert ( $set ); $this->getUserAction(); }
為了便於顯示效果,在插入后,我直接調用了之前的getUserAction,跳轉到get-user畫面獲取db數據然后顯示。
將這段代碼加入UserController中。
在.zfproject.xml中加入路由配置信息。
<controllerFile controllerName="User"> <actionMethod actionName="insertUser" /> </controllerFile>
<viewControllerScriptsDirectory forControllerName="User"> <viewScriptFile forActionName="insertUser" /> </viewControllerScriptsDirectory>
頁面演示:url: http://localhost/quickstart/public/user/insert-user?name=name_insert
最后一條即為剛剛插入的數據。
2.刪除操作
這個操作也很簡單直接調用delete方法就行,但是需要傳入一個參數,即要刪除數據的id
代碼如下:
public function deleteUserAction() { // action body $user = new UserModel(); $id = $this->getRequest ()->getParam ( "id" ); $adapter = $user->getAdapter (); $where = $adapter->quoteInto ( "id=?", $id ); $user->delete ( $where ); $this->getUserAction(); }
參照 插入操作 在.zfproject.xml中加入路由配置信息。
頁面演示: 刪除id=5的數據
url: http://localhost/quickstart/public/user/delete-user?id=5
id=5的數據已經不存在了,刪除成功。
3.更新操作
更新數據調用update方法,和insert類似,需要將待修改的數據組成一個關聯數組,key是列名,然后在where條件中添加要更新的id信息。
代碼如下: 此次,只獲取了id,也可以獲取name信息,然后將$set 進行修改即可, "name"=>$name
public function updateUserAction() { // action body $id = $this->getRequest ()->getParam ( "id" ); $user = new UserModel(); $adapter = $user->getAdapter (); $set = array ( "name" => "name".$id."_update" ); $where = $adapter->quoteInto ( "id=?", $id ); $user->update ( $set, $where ); $this->getUserAction(); }
在.zfproject.xml中加入路由配置信息。
頁面演示: url:http://localhost/quickstart/public/user/update-user?id=2
id = 2的信息被成功修改。
4.查詢操作
考慮到sql注入,需要使用adapter,quoteinto起到的作用就是轉義,避免sql注入
查詢條件為: 查詢 id>1 並且 name不等於name2_update的所有數據,並按照id降序排序
代碼如下:
public function getUserDetailAction() { $user = new UserModel(); $adapter = $user->getAdapter (); $whereCondition = $adapter->quoteInto ( "name<>?", "name2_update" ) . $adapter->quoteInto ( "and id>?", 1 ); $orderCondition = 'id desc'; $result = $user->fetchAll($whereCondition,$orderCondition)->toArray(); $this->view->result = $result; $this->render ( "get-user-detail" ); }
在views/scripts/user下創建get-user-detail.phtml
內容為 <?php var_dump($this->result);?>
在.zfproject.xml中加入路由配置信息。
頁面演示:
url:http://localhost/quickstart/public/user/get-user-detail
符合條件的數據被全部查出。
以上就是關於zf1框架的配置使用以及mysql關聯增刪改查的操作,如有問題請聯系。
感謝查閱~~~
參照:
http://blog.csdn.net/walkcode/article/details/16840243
http://www.zendframework.org.cn/learn/