默認的引導類的基本結構如下:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{}
具體相應的配置文件:
; APPLICATION_PATH/configs/application.ini[production]autoloaderNamespaces[] = "My_"bootstrap.path = APPLICATION_PATH "/Bootstrap.php"bootstrap.class = "Bootstrap"pluginpaths.My_Bootstrap_Resource = "My/Bootstrap/Resource"resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" [testing : production][development : production]
例如:
autoloaderNamespaces[] = "My_"
此外,為了確保自定義插件資源能夠被找到,需要注冊插件前綴路徑。通過pluginpaths配置選項,其是一個關聯數組,key表示資源插件的類路徑前綴,值是資源類的前綴的路徑格式。
例如:
pluginpaths.My_Bootstrap_Resource = "My/Bootstrap/Resource"
自定義初始化是有必要的,你有兩種方法。第一,你可以使用_init前綴方法;第二中方法可以定義bootstrap<resource>()方法。他們都可以接受配置數組進行相關配置。
如果資源方法指定了返回值,它會被存儲在引導類的容器中。這是非查有用的功能,不同的資源需要進行交互(例如一個資源注入到另一個中)時,可以用getResource() 方法來獲取這些值。
下面的例子展示了一個初始化請求對象的資源方法。可以使用依賴性跟蹤(它依賴前端控制器資源),獲取引導資源,并返回存儲在引導類的值。
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{ protected function _initRequest() { // Ensure front controller instance is present, and fetch it $this->bootstrap('FrontController'); $front = $this->getResource('FrontController'); // Initialize the request object $request = new Zend_Controller_Request_Http(); $request->setBaseUrl('/foo'); // Add it to the front controller $front->setRequest($request); // Bootstrap will store this value in the 'request' key of its container return $request; }}
另一種選擇是使用資源插件。資源插件是執行特定的初始化的對象,具體規定如下:
Zend_Application 對象的實例化時
在引導對象初始化的時候
明確地通過方法調用引導對象時
資源插件實現了Zend_Application_Resource_ResourceAbstract,Zend_Application_Resource_ResourceAbstract簡單的定義了,注入引導對象和配置選項,以及 init()方法。例如,一個自定義“View”:
class My_Bootstrap_Resource_View extends Zend_Application_Resource_ResourceAbstract{ public function init() { $view = new Zend_View($this->getOptions()); Zend_Dojo::enableView($view); $view->doctype('XHTML1_STRICT'); $view->headTitle()->setSeparator(' - ')->append('My Site'); $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=utf-8'); $view->dojo()->setDjConfigOption('parseOnLoad', true) ->setLocalPath('/js/dojo/dojo.js') ->registerModulePath('../spindle', 'spindle') ->addStylesheetModule('spindle.themes.spindle') ->requireModule('spindle.main') ->disable(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper( 'ViewRenderer' ); $viewRenderer->setView($view); return $view; }}
你可以提供資源插件類的名稱,或一個插件加載器前綴路徑的組合和資源插件的短名稱(例如,“view”)使用資源插件:
$application = new Zend_Application( APPLICATION_ENV, array( 'resources' => array( 'My_Bootstrap_Resource_View' => array(), // full class name; OR 'view' => array(), // short name 'FrontController' => array( 'controllerDirectory' => APPLICATION_PATH . '/controllers', ), ), // For short names, define plugin paths: 'pluginPaths = array( 'My_Bootstrap_Resource' => 'My/Bootstrap/Resource', ) ));
class My_Bootstrap_Resource_Layout extends Zend_Application_Resource_ResourceAbstract{ public function init() { // ensure view is initialized... $this->getBootstrap()->bootstrap('view'); // Get view object: $view = $this->getBootstrap()->getResource('view'); // ... }}
$application = new Zend_Application(...);$application->bootstrap() ->run();
通常,您可能需要初始化特定的資源:
$application = new Zend_Application(...);$application->getBootstrap()->bootstrap('db'); $service = new Zend_XmlRpc_Server();$service->setClass('Foo'); // uses database...echo $service->handle();
你可以重載 bootstrap() 調用內部方法或資源:
$application = new Zend_Application(...);$application->getBootstrap()->bootstrapDb();
相關原文網址
http://framework.zend.com/manual/en/zend.application.html
http://framework.zend.com/manual/en/zend.application.examples.html
http://framework.zend.com/manual/en/zend.application.core-functionality.html
http://framework.zend.com/manual/en/zend.application.available-resources.html
http://aaronsaray.com/blog/2011/05/24/zend-framework-bootstrap-vs-front-controller-plugin/
http://blog.straylightrun.net/2011/04/13/zend-framework-bootstrap-php-or-they-hung-him-up-by-his-bootstraps/