Zend Framework1 框架入門(針對Windows,包含安裝配置與數據庫增刪改查)


 

 

最近公司接的項目需要用到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下)

           打開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(50NOT 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/

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com