亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

走進Zend Framework框架編程4(Zend_Controller和引導文件)

2019-11-17 04:11:20
字體:
來源:轉載
供稿:網友

Zend_Controller和引導文件

上一節的基本示例已經運行成功,說明ZF已經開始工作了。這一部分我首先引入Zend_Controller的概念,再對引導文件index.php做一個詳細的解釋。
1,理解Zend_Controller
Zend_Controller是ZF的MVC體系的核心部份。
Front Controller(前端控制器)設計模式具體是由Zend_Controller_Front靜態類實現的,所有的請求都必須通過前端控制器,并基于請求的URL被分發(dispatch)到不同的控制器去來處理。
Zend_Controller體系具有可擴展性,可以通過繼承已有的類,或者通過實現各種接口和繼承抽象類來寫自己的擴展類,也可以編寫插件或者助手類(helper)來增強系統的功能。
Zend_Controller_Front類的聲明和所有初始化工作,以及執行dispatch()方法等都是在Bootstrap文件即入口程序中完成的,在ZF中,通常就是指index.php文件。因為用戶的所有請求都是從index.php進入的,所以需要配置Web服務器,把所有請求導向到index.php文件中,這些我們在前邊已經完成了,而這里我們已經對其原因有了更深入的理解。
2,理解ZF是如何處理HTTP請求的:
例如有一個URL請求地址http://host_name/controller_name/action_name。
其中host_name一般是一個域名,例如www.why100000.com。默認情況下,該URL的第一個部份controller_name會映射到一個控制器,第二個部份action_name則映射到控制器類中的Action(控制器類內部的一個方法)。在本例中,其服務器路徑為/controller_name/action_name,則會映射到controller_name控制器和action_name這個Action。如果不存在該action,則會默認調用index這個action。如果控制器不存在,則會默認自動調用index控制器(按照Apache的命名慣例,將自動映射到DirectoryIndex文件)。
接下來,Zend_Controller的dispatcher會根據控制器的名稱找到具體的控制器類。通常它會把控制器名稱加上Controller。因此,上例中controller_name控制器與controller_name Controller類相對應。
類似地,action會映射到控制器類中的一個方法。默認情況下,會被轉成小寫字母,然后加上“Action”字符串。因此,上例中action_name這個action與 action_name Action相對應。于是最終我們訪問URL調用的是
controller_name Controller-> action_name Action()
方法。
控制器類保存為controller文件夾下的一個php文件中,文件名前綴約定與controller類的名字相同。例如Controller_nameController.php。
現在我們根據以上約定創建一個控制器和Action方法:<?php

class Controller_nameController extends Zend_Controller_Action

{

  function action_nameAction()

  {

……

}

}

?>

復制代碼以上代碼需要以文件名Controller_nameController.php保存,并存放到controllers文件夾下。
ZF有一個約定,就是當url中不指定控制器名時,默認為index控制器;當不指定action名時,默認為index action。于是,當控制器名和action都不指定時,就執行index控制器類的indexAction方法,這時類文件形如:<?php

class IndexController extends Zend_Controller_Action

{

  function indexAction()

  {

……

}

}

?>

復制代碼該代碼保存為IndexController.php文件名。
一般的控制器類都有一個indexAction函數,作為控制器的默認方法。
注意在url中,控制器名和action可以同時省略:即形如http://host_name/
也可以省略action名,執行indexAction方法,形如http://host_name/controller_name/
但不能省略控制器名而指定action名,即
http://host_name//action_name
是不正確的。
形如http://host_name/xxx的地址,xxx被認為是控制器名。
對于我們上一節的示例,當用瀏覽器打開地址http://phpchica1.com:8080,其實執行的是IndexController控制器類的indexAction方法,執行了語句
echo “Hello PHPChina1.com!”;
而我們在IndexController控制器類中再建立一個成員函數:function otherAction()

  {

echo “this is other Action.”;
http://www.49028c.com/
  }
復制代碼在瀏覽器地址欄輸入http://phpchica1.com:8080/index/other,將會輸出字符串“this is other Action.”。
3,對引導(bootstrap)文件index.php的解釋
error_reporting(E_ALL|E_STRICT);語句打開了錯誤輸出開關,用于代碼調試,正式發布的代碼應該屏蔽錯誤信息。
date_default_timezone_set(’Asia/Shanghai’);設定時區,該語句不能省略。
set_include_path(……);很關鍵的語句。用于設定類庫的包含路徑,ZF的系統類庫就是在這里指定的。注意如果php.ini文件里的include_path包含了ZF類庫的路徑,這里就可以不用包含../library路徑。但是在自己的代碼里指定ZF類庫路徑更方便一些,一般推薦這么做。../App_phpchina.com/models/路徑下包含我們自己開發的自定義類文件。沒有自定義類文件,可以不用包含該路徑。get_include_path再取得php.ini的其他包含路徑,一同指定我們的應用程序使用。
include “Zend/Loader.php”;語句裝載ZF的類加載器。Zend/Loader.php正是從../library路徑下取得的。
Zend_Loader::registerAutoload();自動加載類。該語句可以分別用以下兩段代碼代替,效果相同:
第一段代碼:
  function __autoload($class)
  {  Zend_Loader::loadClass($class);  }
第二段代碼:
  Zend_Loader::loadClass(’Zend_Controller_Front’);
$fc = Zend_Controller_Front::getInstance();取得Zend_Controller_Front類實例。
$fc->setControllerDirectory(……);指定一組控制器文件路徑,參數是數組。讓前端控制器知道從哪里去找我們的控制器類。如果僅有一個控制器文件夾,也可以寫成:
$fc->setControllerDirectory(’../App_www.mydomain.com/controllers’);
$fc->throwExceptions(true);設置拋出錯誤信息。
$fc->setParam(’xxx’, true);格式的語句用于設置一些參數。
其中$fc->setParam(’noViewRenderer’, true);指明不使用視圖,false 是默認值。
$fc->dispatch();語句開始執行分發,導向到請求的控制器執行后續代碼。
這是一個功能較少的、典型的bootstrap引導文件,每個ZF應用中,該文件大同小異,只是個別參數設置不同。這個文件可以作為一個模板,拷貝到其他ZF應用中使用。這個文件與ZF應用的文件夾結構有直接關系,配置時一定要仔細。調整一些參數后可以使ZF有一些其他的額外功能。這點我們以后還會接觸到。
4,ZF中請求URL的格式
Zend Framework的控制器 Zend_Controller使網站支持“干凈的URL”。它把對控制器、方法的請求和參數的傳遞變形為對文件夾的訪問形式。URL的完整格式為:
http://host_name/controller_name/action_name/param1/ value1/param2/ value2…
除過前邊的host_name外,controller_name和action_name為控制器和方法名,后邊的殘出和值必須一一對應。
傳遞的參數,在action方法中以 $this->_getParam(”參數名”);的方法來取得其值。
因為有嚴格的對應關系,一般在有參數傳遞的情況下,控制器和action的名字都不能省略,否則會出現歧義。
我們現在在
C:/PRogram Files/Apache Software Foundation/Apache2.2/htdocs/app_phpchina1.com
/controllers
文件夾下建立一個NewsController.php文件,內容為:<?php

  class NewsController extends Zend_Controller_Action

  {

function indexAction()

{

  echo “Welcome to News!”;

}

function pageAction()

{

  $id = $this->_getParam(”id”);

  echo “ID: “.$id.”<BR>”;

  $type = $this->_getParam(”type”);

  echo “TYPE: “.$type.”<BR>”;

}

  }

?>

復制代碼然后我們以http://phpchina1.com:8080/news/page/id/001/type/typename地址訪問該文件,會得到以下顯示結果,可以看到已經正確的獲得了傳遞的參數:
ID: 001
TYPE: typename
我們看到,ZF訪問框架內的控制器方法,不是通過從url中訪問控制器類php文件來實現的,而是在index.php中前端控制器的控制下對對應的控制器及其方法進行訪問,一切過程和細節都被ZF框架屏蔽了,我們只要寫出正確的url就能訪問到對應的程序邏輯。
我們可以試著訪問http://phpchina1.com:8080/index.php地址,實際上執行的還是IndexController控制器的indexAction方法,輸出字符串“Hello PHPChina1.com!”。而想直接訪問IndexController.php和NewsController.php文件,我們甚至連它們的url路徑是什么都無法知道。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费看国产| 97国产suv精品一区二区62| 欧洲成人性视频| 成人淫片在线看| 欧美视频在线视频| 精品女同一区二区三区在线播放| 亚洲图片欧美午夜| 亚洲人成电影网站色xx| 成人h片在线播放免费网站| 久久好看免费视频| 日韩午夜在线视频| 国产精品嫩草影院久久久| 91在线观看免费| 亚洲va码欧洲m码| 亚洲欧美另类中文字幕| 国产精品18久久久久久麻辣| 久久影视电视剧免费网站清宫辞电视| 欧美午夜女人视频在线| 国产精品日本精品| 日韩精品中文字| 久久激情五月丁香伊人| 国产欧美va欧美va香蕉在线| 亚洲加勒比久久88色综合| 亚洲欧美制服中文字幕| 青青草原一区二区| 国产噜噜噜噜噜久久久久久久久| 日韩av手机在线观看| 欧美激情一区二区三区久久久| 亚洲第一色在线| 日韩成人久久久| 日韩成人网免费视频| 91精品国产高清久久久久久91| 最近中文字幕日韩精品| 日韩在线视频免费观看高清中文| 日韩大片免费观看视频播放| 欧美性猛交xxxx黑人| 日韩视频在线观看免费| 美乳少妇欧美精品| 久久久久久久久久国产精品| 国产日韩在线视频| 久久影院中文字幕| 国产婷婷成人久久av免费高清| 国产伦精品一区二区三区精品视频| 国产精品久久久久久久久影视| 欧美成人黑人xx视频免费观看| 亚洲国产精品美女| 92裸体在线视频网站| 久久夜精品va视频免费观看| 日本成人在线视频网址| 亚洲专区中文字幕| 中文国产成人精品久久一| 在线中文字幕日韩| 98精品在线视频| 日本久久91av| 国产精品欧美在线| 亚洲天堂网在线观看| 成人国产精品免费视频| 国产69精品99久久久久久宅男| 色午夜这里只有精品| 欧美精品少妇videofree| 国产大片精品免费永久看nba| 欧美日韩国产一区在线| 亚洲第一网站免费视频| 成人在线中文字幕| 欧美自拍大量在线观看| 久久精品免费电影| 日韩在线高清视频| 久久免费精品视频| 国产精品麻豆va在线播放| 欧美福利小视频| 亚洲伊人成综合成人网| 亚洲人成五月天| 欧美一性一乱一交一视频| 国产精品丝袜白浆摸在线| 欧美高跟鞋交xxxxxhd| 992tv成人免费影院| 日韩国产激情在线| 亚洲自拍偷拍网址| 红桃av永久久久| 欧美黑人极品猛少妇色xxxxx| 91在线无精精品一区二区| 欧美区二区三区| 在线观看视频亚洲| 久久视频在线播放| 亚洲国产精品99| 秋霞午夜一区二区| 亚洲xxx大片| 久久好看免费视频| 国产精品69久久久久| 欧美视频在线视频| 亚洲精品日韩欧美| 亚洲在线视频福利| 国产成人高清激情视频在线观看| 国产精品日韩在线一区| 日韩精品在线视频| 亚洲图片在线综合| 全球成人中文在线| 国产精品久久久精品| 国产亚洲精品久久久久久777| 欧美xxxx综合视频| 国产精品国产福利国产秒拍| 亚洲精品视频播放| 亚洲影院色在线观看免费| 亚洲国产精品va在看黑人| 欧美性猛交xxxx乱大交| 91国产视频在线| 亚洲欧美999| 国产精品一区av| 色偷偷亚洲男人天堂| 亚洲国产精品电影在线观看| 欧美一乱一性一交一视频| 97精品伊人久久久大香线蕉| 亚洲综合色激情五月| 亚洲国产女人aaa毛片在线| 91久久久久久国产精品| 精品国产一区二区三区久久| 欧美激情视频给我| 国产91精品最新在线播放| 91九色国产社区在线观看| 中文字幕欧美日韩精品| 欧美高清视频在线| 亚洲欧美日韩久久久久久| 欧美成人午夜激情| 国产精品91视频| 久久久久久999| 欧美一区二区三区艳史| 欧美日韩一区二区在线播放| www.国产一区| 国产精自产拍久久久久久蜜| 久久久噜噜噜久久久| 欧美另类xxx| 日韩精品极品在线观看播放免费视频| 亚洲国产精品人久久电影| 一区二区三区天堂av| 91在线精品播放| 91香蕉国产在线观看| 日韩精品视频在线观看免费| 成人av电影天堂| 亚洲天堂成人在线| 另类专区欧美制服同性| 九九精品在线观看| 欧美午夜片欧美片在线观看| 日韩一区视频在线| 成人免费看黄网站| 2023亚洲男人天堂| 亚洲欧美日韩国产中文专区| 中文字幕九色91在线| 91麻豆国产精品| 136fldh精品导航福利| 亚洲精品一区二区三区不| 日韩欧美a级成人黄色| 97人人爽人人喊人人模波多| 不卡av电影院| 国产欧美婷婷中文| 91视频九色网站| 亚洲91精品在线观看| 色噜噜国产精品视频一区二区| 韩国日本不卡在线| 在线观看视频亚洲| wwwwwwww亚洲| 国产精品国产三级国产专播精品人| 精品一区精品二区| 欧美黑人极品猛少妇色xxxxx| 成人黄色片在线|