


Ausführliche Erl?uterung der Anwendungs- und Bootstrap-Nutzung im Zend Framework-Tutorial
Dec 27, 2016 pm 02:36 PMDie Beispiele in diesem Artikel beschreiben die Verwendung von Application und Bootstrap im Zend Framework-Tutorial. Geben Sie es wie folgt als Referenz an alle weiter:
In einer MVC-Anwendung müssen wir eine Datenbankverknüpfung initialisieren und einrichten, Ansichten und Ansichtsassistenten konfigurieren, das Layout konfigurieren, zugeh?rige Plug-Ins registrieren und Aktionsassistenten registrieren usw. Wir müssen die Konfigurations- und Vorbereitungsarbeiten einzeln abschlie?en. Manchmal sind m?glicherweise einige Initialisierungsvorg?nge erforderlich, in einigen F?llen sind diese Initialisierungen jedoch m?glicherweise nicht erforderlich. Zend_Application kann diese Vorg?nge nicht nur abschlie?en, sondern auch diese Konfigurations- und Initialisierungsaufgaben einheitlicher und geordneter gestalten und die Wiederverwendbarkeit erh?hen.
Die Verwendung von Zend_Application kann in drei Typen unterteilt werden:
Zend_Application: l?dt die PHP-Umgebung, einschlie?lich include_paths und automatischem Laden, und instanziiert die Boot-Klasse.
Zend_Application_Bootstrap: Stellt eine Schnittstelle für Boot-Klassen bereit.
Zend_Application_Bootstrap_Bootstrap vervollst?ndigt die h?ufigsten Funktionen, die der Bootvorgang bereitstellen muss, einschlie?lich Abh?ngigkeitsprüfung und Laden von Boot-Ressourcen bei Bedarf.
Zend_Application_Resource bietet eine On-Demand-Funktion zum Laden von Ressourcen
Entwickler k?nnen je nach Bedarf Zend_Application_Bootstrap_Bootstrap erben oder die Zend_Application_Bootstrap_Bootstrapper-Schnittstelle implementieren. Zend_Application wird in die Eintragsdatei (zum Beispiel public/index.php) geladen und entsprechend den Boot-Optionen und der aktuellen Umgebungskonfiguration instanziiert.
Die Boot-Optionen umfassen die angegebene Boot-Klassendatei und den Boot-Klassenpfad. Die Optionen lauten wie folgt:
Erforderliche include_paths
Die automatische Ladefunktion l?dt zus?tzlich den registrierten Namespace
php.ini-Initialisierungseinstellungen
Geben Sie den Bootstrap-Klassennamen an, wenn er nicht ?Bootstrap“ ist.
Das Pr?fix-Schlüssel-Wert-Paar der Ressource stellt den Ressourcenpr?fixnamen dar
Der Name oder Alias ??der Ressourcenklasse
Zus?tzlicher geladener Konfigurationsdateipfad
Zus?tzliche Konfigurationsoptionen
Die Option kann ein Array oder ein Zend_Config-Objekt oder ein sein Konfigurationsdatei an einem angegebenen Ort
Bootstrapper
Die zweite Funktion von Zend_Application besteht darin, die Anwendung zu führen. Die spezifische Schnittstellen-API lautet wie folgt:
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 stellt haupts?chlich die Umgebungskonfiguration bereit.
Sie k?nnen die Schnittstelle implementieren oder Zend_Application_Bootstrap_BootstrapAbstract oder Zend_Application_Bootstrap_Bootstrap erben.
Ressourcenmethode
Die Ressourcenmethode das die Zend_Application_Bootstrap_BootstrapAbstract-Schnittstelle implementiert, muss den folgenden Regeln folgen. Der Methodentyp muss mit _init beginnen.
Wenn Sie eine Ressourcenmethode laden und verwenden m?chten name in bootstrap(). Der Ressourcenname ist die Ressourcenmethode und entfernt das Pr?fix _init.
Wenn Sie mehrere Ressourcenmethoden laden m?chten, k?nnen Sie diese über ein Array angeben.
Zum Beispiel Bootstrap-Klasse:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initFoo() { // ... } protected function _initBar() { // ... } protected function _initBaz() { // ... } }
Nur ??mit _initFoo() laden:
$bootstrap->bootstrap('foo');
Mit _initFoo() und _initBar() laden:
$bootstrap->bootstrap(array('foo', 'bar'));
Laden und verwenden Sie alle Ressourcenmethoden, verwenden Sie bootstrap() ohne Parameter:
$bootstrap->bootstrap();
Erstellen Sie ein neues first_web-Projekt
root@coder-671T-M:/mydev_src /zend_framework_learn /www# tree first_web/
first_web/
├── application
│ ├── Bootstrap.php
│ ├── configs
│ │ └── application.ini
│ ├── Controller
│ │ ├── ErrorController.php
│ │ └── IndexController.php
│ ├── Modelle
│ └──. Ansichten
│ ├ ── Helfer
│? └── Skripte
│? ├── Fehler
│? └── error.phtml
│??????????????? └──. index.phtml
├ ── Dokumente
│ └── README.txt
├── Bibliothek
├── ?ffentlich
│ └── index.php
└── Tests
├── Anwendung
│ └─ ─ Controller
│ └── IndexControllerTest.php
├── bootstrap.php
├── Bibliothek
└── phpunit.xml
16 ies, 11 Dateien
├── application
│ ├── Bootstrap.php
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }2. Konfigurationsdatei
│ ├── configs
│ │ └── application.ini
具體代碼如下:
[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.項目入口文件
├── public
│ └── index.php
<?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方式,完成了環(huán)境變量的初始化,加載配置文件,初始化環(huán)境,加載模塊,完成web應(yīng)用程序的引導(dǎo)功能。
資源插件
資源插件只需要實現(xiàn)Zend_Application_Resource_Resource,或者,更簡單的是,繼承Zend_Application_Resource_ResourceAbstract。接口如下:
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(); }
例如
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; } }
加載使用資源插件
我了提供資源的重用性,可以將資源方法定義為資源插件。。
為了讓bootstrap能夠識別資源插件,定義資源插件時,需要實現(xiàn)Zend_Application_Bootstrap_ResourceBootstrapper. 接口定義了查找插件,注冊插件和加載插件的api:
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(); }
采用資源插件,不僅可以讓資源可以重復(fù)利用,同時讓bootstrap更簡潔,如果要修改,新增資源也無需修改你的bootstrap。
通過實現(xiàn)Zend_Application_Bootstrap_BootstrapAbstract (被 Zend_Application_Bootstrap_Bootstrap 繼承) ,才可以使用定義的資源插件
通過將指定的選項傳遞到application object and/or bootstrap,來注冊使用資源插件。這些選項可能會從一個配置文件,或通過手動指定。規(guī)則是選項必須是鍵值對,鍵代表資源名稱。資源名稱,是資源插件類的類前綴。例如,Zend框架自帶的資源類前綴“Zend_Application_Resource_”;任何以下,這都是資源的名稱。例如,
$application = new Zend_Application(APPLICATION_ENV, array( 'resources' => array( 'FrontController' => array( 'controllerDirectory' => APPLICATION_PATH . '/controllers', ), ), ));
"FrontController"資源是個特例。他的選項比較特殊。
無論是使用自己的寫的資源插件還是使用第三方的資源插件。你必須保證bootstrap能找到他們,bootstrap 內(nèi)部通過 Zend_Loader_PluginLoader可以讓我們只需要指定資源插件的類前綴,值為資源類的類路徑便可以輕松注冊資源插件。
例如,如果編寫的資源插件存放在APPLICATION_PATH/resources/ 下,類前綴為My_Resource. 可以使用如下方法注冊加載:
$application = new Zend_Application(APPLICATION_ENV, array( 'pluginPaths' => array( 'My_Resource' => APPLICATION_PATH . '/resources/', ), 'resources' => array( 'FrontController' => array( 'controllerDirectory' => APPLICATION_PATH . '/controllers', ), ), ));
在應(yīng)用程序中比可以使用指定目錄下的資源。
和資源方法類似,通過使用 the bootstrap() 方法可以加載資源插件。加載單一,多個,全部的資源插件的配置方式也類似.
例如:
// Execute one: $bootstrap->bootstrap('FrontController'); // Execute several: $bootstrap->bootstrap(array('FrontController', 'Foo')); // Execute all resource methods and plugins: $bootstrap->bootstrap();
資源注冊表
為了避免資源的重復(fù)注冊,導(dǎo)致不必要的浪費Zend_Application_Bootstrap_BootstrapAbstract 提供了一個本地注冊表對象存儲這些資源對象.當(dāng)你想要存放一個資源的時候,只需要在方法中返回這個資源即可。
為了靈活性,注冊表是作為一個內(nèi)部“容器”存在的。只要是對象都可以存入到容器中。資源名稱對應(yīng)為容器的屬性。默認(rèn)情況下,可以通過Zend_Registry獲取實例使用,也可以自定義其他對象。 setContainer() and getContainer() 方法可用于操縱容器本身。getResource($resource) 可用于獲取一個指定資源。hasResource($resource) 可以檢查資源是否已經(jīng)注冊存在
例如,注冊一個view資源:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initView() { $view = new Zend_View(); // more initialization... return $view; } }
資源的相關(guān)操作:
// 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() , 執(zhí)行了 run() 之后,它會注冊為前端控制器參數(shù)的“bootstrap”,通過他可以獲取路由器,分發(fā)器,插件和動作控制器。
具體使用方法:
class FooController extends Zend_Controller_Action { public function init() { $bootstrap = $this->getInvokeArg('bootstrap'); $view = $bootstrap->getResource('view'); // ... } }
為了防止重復(fù)注冊加載資源方法和插件或一些資源可能依賴于其他資源。為了解決這兩個問題,Zend_Application_Bootstrap_BootstrapAbstract提供了一個簡單的依賴性跟蹤機制。
如前所述,所有的資源 - 無論是方法或插件 - 是通過 bootstrap($resource)加載運行的,其中 $resource是資源的名稱,或者資源名稱數(shù)組,或者為空,為空表示加載運行所有資源。
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; } }
希望本文所述對大家PHP程序設(shè)計有所幫助。
更多Zend Framework教程之Application和Bootstrap用法詳解相關(guān)文章請關(guān)注PHP中文網(wǎng)!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)