【PHP-ZF】基礎知識學習筆記(一)

-  zendframework官網php

class 1  初步認識php zendframework 框架、配置開發環境、建立zf項目

1.php經常使用框架:zendframework,thinkphp(國人開發),yii(外企用的較多),cakephpcss

2.mvc框架:model 模型,view 試圖,controller 控制器html

3.zf的優點:固定的文件夾歸類,程序更加規範化,開發效率提升了,程序的可讀性增長,可維護性增長等等,不足之處就是配置比較複雜。mysql

4.開發環境配置步驟:
    1-下載庫,
    2-建立zf工程(手工建立,使用ZendStudio建立zf項目,使用zf.bat程序建立--進入zf.bat所在目錄,使用zf.bat create project 項目路徑 建立項目)詳細見:http://my.oschina.net/maomi/blog/86080
    3-使用zendstudio建立一個空項目
    4-把建立的項目結構拷貝到新建的空項目中
    5-引入zf庫到該項目中,將zf解壓後library中的zend包拷貝到library目錄下便可
    6-配置apache,讓它支持zf框架(wamp配置步驟見:http://my.oschina.net/maomi/blog/86076
        6.1開啓PDO和PDO相關數據庫引擎
            ;extension=php_pdo_mysql.dll 去掉前面的分號就能夠(wamp已經配置好這一點)
        6.2開啓apache的rewrite模塊
            在httpd.conf文件中,啓用 LoadModule rewrite_module modules/mod_rewrite.so
            再將, AllowOverride None 改爲  All
    7-配置虛擬主機(自定義和wamp安裝環境不同)
        自定義:在httpd.conf文件中,啓用---->
          
            dns 添加示例: 127.1.10 marong.com // 前面是ip地址,後面是在瀏覽器中輸入的地址
    8-從新啓動apache服務器sql

---------------------------------------------------------------------------------------------------------chrome

class 2  zend原理剖析、程序調試、zend整合數據庫

1.zend原理剖析
    hosts 127.0.0.1 marong.com :
    瀏覽器地址 marong.com ----http請求---->apache服務器----轉發給index.php------>public/index.php(總控,apache 使用反射機制)-------->controller/indexController.php(分控:init方法默認執行 - indexAction方法執行[可使用model] - 引入對應模板視圖)------------>生成靜態頁面--------->apache服務器--------->瀏覽器thinkphp

2.程序調
    1-使用 file_put_contents在不中斷程序的狀況下,輸出信息到文件,能夠隨時查看記錄
    2-能夠經過debug工具來完成調試
    3-若是提示 require_once()所引用的文件不存在,則能夠將文件的引用路徑改成絕對路徑
        如: require_once APPLICATION_PATH.'../models/Message.php'; 
        其中,APPLICATION_PATH是在總控中初始化的全局變量數據庫

3.zend整合數據庫(示例)
    1-在application.ini中配置數據庫信息
        [mysql]
        db.adapter = PDO_MYSQL
        db.params.host = localhost
        db.params.username = root
        db.params.pwd = root
        db.params.dbname = test
    2-在bootstrap.php中初始化數據庫適配器
        (最好是新建一個抽象父類baseController,該類專門供其餘須要初始化數據庫的類來繼承,繼承該類的子類必須
        require_once(‘baseController.php’))
        class BaseController extends Zend_Controller_Action{
            public function init(){apache

                

            }
json

         }

    注意:http://blog.csdn.net/wang_jingxiang/article/details/6011210 (另外一種配置數據庫的方法)

    3-在models文件夾中編寫模型類(模型類文件名應該跟要操做的數據表名稱相同)
    //設置私有變量,數據庫表名和表的主鍵
    4-在indexController的index方法中,實例化模型類並查詢數據,將數據傳遞給模板對象
    
    5-在模板中引用變量
    6-在.htaaccess文件中設置url重寫規則,將全部以.php結尾的地址都指向 index.php總控文件,讓項目只有一個入口

4.新建控制器方法和對應視圖

5.注意事項
    1-控制器中的方法名(Action前面的單詞)必須是小寫,不然將沒法正常解析
    2-必須設置url重寫規則,保證項目只有一個入口文件(存在不理解的問題,待解決)

---------------------------------------------------------------------------------------------------------

class 3  Zend Framework 中 layout和view詳解

一、使用Zend_View與Zend_Layout玩佈局

layout是很是方便的視圖庫,這裏列舉經常使用的ZF版本爲1.11.11的具體用法
在layout中加載其餘layout頁面
默認的layout頁面,nav頁面與layout同一個目錄

<?php $this->render('nav.phtml') ?>

設置其餘layout或關閉:

//設置其餘 控制器中的layout 
$this->_helper->layout->setLayout('japan_layout'); 

//設置其餘 視圖中的layout  
$this->layout()->setLayout('chinese_layout');  

//關閉 控制器中的layout 
$this->_helper->layout->disableLayout(); 

//關閉 視圖中中的layout  
$this->layout()->disableLayout();

二、如何在controller中傳遞變量到view,而後輸出變量

public function indexAction()
    {
        // action body
        //爲變量賦值
     $this->view->a = "Hay";
     $this->view->b = "bbb";
     $this->view->c = "ccc";
    }

從上邊的程序能夠看出來,用此方式賦值特麻煩,要屢次賦值。能夠將變量放進一個數組或者對象中。assign()方法呢就容許經過數組或者對象賦值:

public function indexAction()
    {
        // action body
       $array = array(
       'a' => "Hay",
       'b' => "bbb",
       'c' => "ccc",
       );
       $this->view->assign($array);
    }

其效果和上邊效果是同樣的,那麼經過對象賦值就有點小不同了,就是要先把對象轉型爲數組: 

    public function indexAction()
    {
         // action body
         $obj = new stdClass();
         $obj->a = "Hay";
         $obj->b= "bbb";
         $obj->c = "ccc";
         $this->view->assign((array) $obj);
    }

assign()方法還有一種用法就是使用兩個字符串做爲assign()方法的參數。這樣第一個參數爲賦值的變量名,第二個參數做爲對應的值。以下:

     $this->view->assign('a',"Hay");
     $this->view->assign('b',"bbb");
     $this->view->assign('c',"ccc");

至於視圖部分代碼以下:index.phtml

<?php 
    echo $this->a."<br>"; 
    echo $this->b."<br><br><br><br>";
    echo $this->c."<br>";
?>

三、禁用視圖並輸出內容

     a、先輸出內容再禁用試圖

$this->_helper->viewRenderer->setNoRender(true); // 可省略
print_r(Zend_Json::encode(array('error'=>403))); // 輸出內容
exit(); // 禁用試圖
return; // 可省略

    輸出結果:

{"error":403}

    b、直接禁用試圖同時輸出內容

$this->_helper->viewRenderer->setNoRender(true); // 可省略
exit(json_encode(array('error'=>403))); 
return; // 可省略

    輸出結果:

{"error":403}

    c、經過拋出「error」關閉視圖

exit(json_encode('error')); //"error" 
exit('error'); //error

四、render,_forward,_redirect的用法和區別

  • render:
    不指定render
    結果:<當前Module>/<當前Controller>/<當前Action>.phtml
    $this->render(‘bar’);
    Result: <當前Module>/<當前Controller>/bar.phtml

  • _forward:
    $this->_forward(‘bar’);
    Result: <當前Module>/<當前Controller>/bar
    $this->_forward(‘bar’,’foo’);
    Result: <當前Module>/foo/bar
    $this->_forward(‘bar’,’foo’,’hoge’);
    Result: hoge/foo/bar
    $params = array(
         ‘a’ -> ‘1’,
         ‘b’ -> ‘2'
    );
    $this->_forward(‘bar’,’foo’,’hoge’,$params);
    Result: hoge/foo/bar/a/1/b/2

  • _redirect:
    $this->_redirect(‘/hoge’);
    Result: /hoge
    $this->_redirect(‘/hoge/foo’);
    Result: /hoge/foo
    $this->_redirect(‘/hoge/foo/bar’);
    Result: /hoge/foo/bar
    $this->_redirect(‘http://localhost/hoge/foo/bar&#39’);
    Result: http://localhost/hoge/foo/bar
    $this->_redirect('http://localhost/hoge/foo/bar?a=1&b=2&#39');
    Result: http://localhost/hoge/foo/bar?a=1&b=2 

五、placeholder 的使用和設置

//在bootstarp中
 $this->bootstrap('view');
 $view = $this->getResource('view');
//成功調用了placeholder
 $view  ->placeholder('test’) ->setPrefix('<h1>HI</h1>’);

  • placeholder 的設置在你的applicateion.ini中加入 resources.view[] = "" ;若是沒有這個設置,你的bootstrap中的$this->bootstrap('view');將會報錯 

---------------------------------------------------------------------------------------------------------

class 4  ZendFramework 如何引入css、圖片、及js代碼

    虛擬目錄指向 public 目錄:

    引入圖片時,能夠設置虛擬目錄,用'/images/a.jpg'這樣的方式來引入public目錄下的圖片,css等內容。

    虛擬目錄指向非 public 目錄:

    解決:方法是使用絕對路徑來引入css,這樣就絕對錯不了了,所以考慮設置一個常量,路徑直指public

    步驟一:Bootstrap.php 因爲這個文件每次都被調用,因此就把常量設到這裏了,代碼以下

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
    public function __construct($application){
        parent::__construct($application);
        $url = dirname(__FILE__);//獲取當前文件Bootstrap.php目錄路徑
        $url = str_replace('application','public',$url);//把當前路徑更換爲public路徑
        $url = str_replace('\\','/',$url);//更改路徑中的「\」爲「/」
        define('__PUBLIC__',$url);//定放常量
    }
}
?>

    步驟二:控制器中代碼

<?php
class AdminController extends Zend_Controller_Action{
    public function indexAction(){
        $this->view->public=__PUBLIC__;//分配到MVC中的「V」也即視圖
        $this->render('index');//能夠不寫
    }
}
?>

    步驟三:視圖中代碼 index.phtml

<link rel="stylesheet" type="text/css" href="<?php echo $this->public; ?>/style/admin.css" />

    P.S.火狐瀏覽器、google的chrome 不支持絕對路徑,使用下面的代碼,更換步驟一中代碼,其餘不變

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
    public function __construct($application){
        parent::__construct($application);
        $url = $_SERVER['SCRIPT_NAME'];
        $url = dirname($url);
        $url = str_replace('\\','/',$url);
        define('__PUBLIC__',$url);
    }
}
?>

---------------------------------------------------------------------------------------------------------

class 5  ZendFramework 配置連接MySQL實例

在application/configs/application.ini中添加數據庫的配置信息

[production]    //在這一行的後面添加數據庫鏈接信息  
resources.db.adapter = PDO_MYSQL  
resources.db.params.host = 127.0.0.1  
resources.db.params.username = root  
resources.db.params.password =   
resources.db.params.dbname = zend_example

在index.php入口文件中加入:

$config = new Zend_Config_Ini('../application/configs/application.ini','production');  
$register = Zend_Registry::getInstance();  
$register->set('config', $config);  
$db = Zend_Db::factory($config->resources->db);  
Zend_Db_Table::setDefaultAdapter($db);
相關文章
相關標籤/搜索