《PHP學習:Zend Framework教程之Application和Bootstrap用法詳解》要點:
本文介紹了PHP學習:Zend Framework教程之Application和Bootstrap用法詳解,希望對您有用。如果有疑問,可以聯系我們。
本文實例講述了Zend Framework教程之Application和Bootstrap用法.分享給大家供大家參考,具體如下:PHP教程
在一個MVC應用程序中,我們需要初始化建立數據庫鏈接,配置視圖和視圖助手,配置布局,注冊相關插件,注冊action 助手等等,這些配置和準備工作我們都需要一一完成.有時候可能有一些初始化操作需要,但是在有些情況下這些初始化可能不需要.通過Zend_Application不僅僅可以完成這些操作,而且可以讓這些配置和初始化工作更統一有序,重用性更高.PHP教程
Zend_Application使用可以細分成三種:PHP教程
Zend_Application:加載PHP環境,包括include_paths和自動加載,并實例化引導類.PHP教程
Zend_Application_Bootstrap:提供引導類的接口.PHP教程
Zend_Application_Bootstrap_Bootstrap完成大多數引導需要提供的通用功能,包括依賴性檢查和按需加載引導資源.PHP教程
Zend_Application_Resource提供資源按需加載功能PHP教程
開發人員可以根據需要繼承Zend_Application_Bootstrap_Bootstrap或實現Zend_Application_Bootstrap_Bootstrapper接口.在入口文件(例如,public/index.php)加載Zend_Application,并根據引導選項和當前環境配置實例化.PHP教程
引導選項包括指定的引導類文件和引導類路徑,選項具體如下:PHP教程
所需要的include_pathsPHP教程
自動加載功能額外加載注冊的命名空間PHP教程
php.ini初始化設置PHP教程
指定bootstrap類名,如果不是"Bootstrap"PHP教程
資源的前綴鍵值對鍵表示資源前綴名稱PHP教程
資源的類名或者別名PHP教程
附加加載的配置文件路徑PHP教程
附加的配置選項PHP教程
選項可以是一個數組,或者Zend_Config對象,或者是指定位置的配置文件PHP教程
引導程序PHP教程
Zend_Application的第二個功能就是引導應用,Bootstraps 必須實現Zend_Application_Bootstrap_Bootstrapper接口, 具體接口API如下:PHP教程
interface Zend_Application_Bootstrap_Bootstrapper { public function __construct($application); public function setOptions(array $options); public function getApplication(); public function getEnvironment(); public function getClassResources(); public function getClassResourceNames(); public function bootstrap($resource = null); public function run(); }
api主要提供了環境配置,獲取引導加載的資源,以及引導程序PHP教程
你可以實現接口或者繼承Zend_Application_Bootstrap_BootstrapAbstract,或者Zend_Application_Bootstrap_Bootstrap.PHP教程
資源辦法PHP教程
實現Zend_Application_Bootstrap_BootstrapAbstract接口的資源辦法必須遵循如下規則. 辦法類型是protected,辦法的前綴必須是_init will開頭.PHP教程
如果要加載使用一個資源辦法,在bootstrap()中添加資源名稱即可,資源名稱是資源辦法去掉_init前綴.PHP教程
如果要加載使用多個資源辦法,可以通過數組指定.PHP教程
例如 bootstrap class:PHP教程
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initFoo() { // ... } protected function _initBar() { // ... } protected function _initBaz() { // ... } }
只加載使用_initFoo()? :PHP教程
$bootstrap->bootstrap('foo');
加載使用 _initFoo() and _initBar() :PHP教程
$bootstrap->bootstrap(array('foo', 'bar'));
加載使用全部資源辦法,使用無參的bootstrap():PHP教程
$bootstrap->bootstrap();
新建first_web項目PHP教程
root@coder-671T-M:/mydev_src/zend_framework_learn/www# tree first_web/
first_web/
├── application
│?? ├── Bootstrap.php
│?? ├── configs
│?? │?? └── application.ini
│?? ├── controllers
│?? │?? ├── ErrorController.php
│?? │?? └── IndexController.php
│?? ├── models
│?? └── views
│?????? ├── helpers
│?????? └── scripts
│?????????? ├── error
│?????????? │?? └── error.phtml
│?????????? └── index
│?????????????? └── index.phtml
├── docs
│?? └── README.txt
├── library
├── public
│?? └── index.php
└── tests
??? ├── application
??? │?? └── controllers
??? │?????? └── IndexControllerTest.php
??? ├── bootstrap.php
??? ├── library
??? └── phpunit.xml
16 directories, 11 filesPHP教程
較新版本的zend framework引入了Zend_Application和Bootstrap.Zend_Application 提供了一個可重用資源的引導,通用和模塊化的引導類和依賴檢查. 同時默認負責設置 PHP 環境變量和自動加載功能.PHP教程
默認新建項目后,會給出如下的幾個文件:PHP教程
1.項目的BootstrapPHP教程
first_web/
├── application
│?? ├── Bootstrap.phpPHP教程
具體代碼如下:PHP教程
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
2.配置文件PHP教程
│?? ├── configs
│?? │?? └── application.iniPHP教程
具體代碼如下:PHP教程
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1
3.項目入口文件PHP教程
├── public
│?? └── index.phpPHP教程
<?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
以上代碼就是基本的使用Zend_Application方式,完成了環境變量的初始化,加載配置文件,初始化環境,加載模塊,完成web應用程序的引導功能.PHP教程
資源插件PHP教程
資源插件只需要實現Zend_Application_Resource_Resource,或者,更簡單的是,繼承Zend_Application_Resource_ResourceAbstract.接口如下:PHP教程
interface Zend_Application_Resource_Resource { public function __construct($options = null); public function setBootstrap( Zend_Application_Bootstrap_Bootstrapper $bootstrap ); public function getBootstrap(); public function setOptions(array $options); public function getOptions(); public function init(); }
例如PHP教程
class My_Resource_View extends Zend_Application_Resource_ResourceAbstract { protected $_view; public function init() { // Return view so bootstrap will store it in the registry return $this->getView(); } public function getView() { if (null === $this->_view) { $options = $this->getOptions(); $title = ''; if (array_key_exists('title', $options)) { $title = $options['title']; unset($options['title']); } $view = new Zend_View($options); $view->doctype('XHTML1_STRICT'); $view->headTitle($title); $view->headLink()->appendStylesheet('/css/site.css'); $view->headScript()->appendfile('/js/analytics.js'); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer' ); $viewRenderer->setView($view); $this->_view = $view; } return $this->_view; } }
加載使用資源插件PHP教程
我了提供資源的重用性,可以將資源辦法定義為資源插件..PHP教程
為了讓bootstrap能夠識別資源插件,定義資源插件時,需要實現Zend_Application_Bootstrap_ResourceBootstrapper. 接口定義了查找插件,注冊插件和加載插件的api:PHP教程
interface Zend_Application_Bootstrap_ResourceBootstrapper { public function registerPluginResource($resource, $options = null); public function unregisterPluginResource($resource); public function hasPluginResource($resource); public function getPluginResource($resource); public function getPluginResources(); public function getPluginResourceNames(); public function setPluginLoader(Zend_Loader_PluginLoader_Interface $loader); public function getPluginLoader(); }
采用資源插件,不僅可以讓資源可以重復利用,同時讓bootstrap更簡潔,如果要修改,新增資源也無需修改你的bootstrap.PHP教程
通過實現Zend_Application_Bootstrap_BootstrapAbstract (被 Zend_Application_Bootstrap_Bootstrap 繼承) ,才可以使用定義的資源插件PHP教程
通過將指定的選項傳遞到application object and/or bootstrap,來注冊使用資源插件.這些選項可能會從一個配置文件,或通過手動指定.規則是選項??必須是鍵值對,鍵代表資源名稱.資源名稱,是資源插件類的類前綴.例如,Zend框架自帶的資源類前綴“Zend_Application_Resource_”;任何以下,這都是資源的名稱.例如,PHP教程
$application = new Zend_Application(APPLICATION_ENV, array( 'resources' => array( 'FrontController' => array( 'controllerDirectory' => APPLICATION_PATH . '/controllers', ), ), ));
"FrontController"資源是個特例.他的選項比較特殊.PHP教程
無論是使用自己的寫的資源插件還是使用第三方的資源插件.你必須保證bootstrap能找到他們,bootstrap 內部通過 Zend_Loader_PluginLoader可以讓我們只需要指定資源插件的類前綴,值為資源類的類路徑便可以輕松注冊資源插件.PHP教程
例如,如果編寫的資源插件存放在APPLICATION_PATH/resources/ 下,類前綴為My_Resource. 可以使用如下辦法注冊加載:PHP教程
$application = new Zend_Application(APPLICATION_ENV, array( 'pluginPaths' => array( 'My_Resource' => APPLICATION_PATH . '/resources/', ), 'resources' => array( 'FrontController' => array( 'controllerDirectory' => APPLICATION_PATH . '/controllers', ), ), ));
在應用程序中比可以使用指定目錄下的資源.PHP教程
和資源辦法類似,通過使用 the bootstrap() 辦法可以加載資源插件.加載單一,多個,全部的資源插件的配置方式也類似.PHP教程
例如:PHP教程
// Execute one: $bootstrap->bootstrap('FrontController'); // Execute several: $bootstrap->bootstrap(array('FrontController', 'Foo')); // Execute all resource methods and plugins: $bootstrap->bootstrap();
資源注冊表PHP教程
為了避免資源的重復注冊,導致不必要的浪費Zend_Application_Bootstrap_BootstrapAbstract 提供了一個本地注冊表對象存儲這些資源對象.當你想要存放一個資源的時候,只需要在辦法中返回這個資源即可.PHP教程
為了靈活性,注冊表是作為一個內部“容器”存在的.只要是對象都可以存入到容器中.資源名稱對應為容器的屬性.默認情況下,可以通過Zend_Registry獲取實例使用,也可以自定義其他對象. setContainer() and getContainer() 方法可用于把持容器本身.getResource($resource) 可用于獲取一個指定資源.hasResource($resource) 可以檢查資源是否已經注冊存在PHP教程
例如,注冊一個view資源:PHP教程
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initView() { $view = new Zend_View(); // more initialization... return $view; } }
資源的相關操作:PHP教程
// Using the has/getResource() pair: if ($bootstrap->hasResource('view')) { $view = $bootstrap->getResource('view'); } // Via the container: $container = $bootstrap->getContainer(); if (isset($container->view)) { $view = $container->view; }
請注意:注冊表容器是不是全局的.這意味著你需要通過拜訪的bootstrap來獲取資源. Zend_Application_Bootstrap_Bootstrap提供了 run() , 執行了 run() 之后,它會注冊為前端控制器參數的“bootstrap”,通過他可以獲取路由器,分發器,插件和動作控制器.PHP教程
具體使用辦法:PHP教程
class FooController extends Zend_Controller_Action { public function init() { $bootstrap = $this->getInvokeArg('bootstrap'); $view = $bootstrap->getResource('view'); // ... } }
為了防止重復注冊加載資源辦法和插件或一些資源可能依賴于其他資源.為了解決這兩個問題,Zend_Application_Bootstrap_BootstrapAbstract提供了一個簡單的依賴性跟蹤機制.PHP教程
如前所述,所有的資源 - 無論是辦法或插件 - 是通過 bootstrap($resource)加載運行的,其中 $resource是資源的名稱,或者資源名稱數組,或者為空,為空表示加載運行所有資源.PHP教程
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initRequest() { // Ensure the front controller is initialized $this->bootstrap('FrontController'); // Retrieve the front controller from the bootstrap registry $front = $this->getResource('FrontController'); $request = new Zend_Controller_Request_Http(); $request->setBaseUrl('/foo'); $front->setRequest($request); // Ensure the request is stored in the bootstrap registry return $request; } }
更多關于zend相關內容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優秀開發框架總結》、《Yii框架入門及常用技巧總結》、《ThinkPHP入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》PHP教程
希望本文所述對大家PHP程序設計有所贊助.PHP教程
歡迎參與《PHP學習:Zend Framework教程之Application和Bootstrap用法詳解》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7386.html