国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) Zend Framework教程之Application與Bootstrap用法詳解

Zend Framework教程之Application與Bootstrap用法詳解

Dec 27, 2016 pm 02:36 PM

本文實例講述了Zend Framework教程之Application和Bootstrap用法。分享給大家供大家參考,具體如下:

在一個MVC應(yīng)用程式中,我們需要初始化建立資料庫鏈接,配置視圖和視圖助手,配置佈局,註冊相關(guān)插件,註冊action 助手等等,這些配置和準備工作我們都需要一一完成。有時候可能會有一些初始化操作需要,但是在某些情況下這些初始化可能不需要。透過Zend_Application不僅可以完成這些操作,而且可以讓這些配置和初始化工作更統(tǒng)一有序,重複使用性更高。

Zend_Application使用可以細分成三種:

Zend_Application:加載PHP環(huán)境,包括include_paths和自動加載,並實例化引導(dǎo)類別。

Zend_Application_Bootstrap:提供引導(dǎo)類別的介面。

Zend_Application_Bootstrap_Bootstrap完成大多數(shù)引導(dǎo)所需提供的通用功能,包括依賴性檢查和按需載入引導(dǎo)資源。

Zend_Application_Resource提供資源隨選載入功能

開發(fā)人員可以依需求繼承Zend_Application_Bootstrap_Bootstrap或?qū)嵶鱖end_Application_Bootstrap_Bootstrapper介面。在入口檔案(例如,public/index.php)載入Zend_Application,並根據(jù)引導(dǎo)選項和目前環(huán)境配置實例化。

引導(dǎo)選項包含指定的引導(dǎo)類別檔案和引導(dǎo)類別路徑,選項如下:

所需要的include_paths

自動載入功能額外載入註冊的命名空間

php.ini初始化設(shè)定

strap指定載入註冊的命名空間

php.ini初始化設(shè)定

strap指定bootbootb如果不是"Bootstrap"

資源的前綴鍵值對鍵表示資源前綴名稱

資源的類別名稱或別名

附加載入的設(shè)定檔路徑

附加的設(shè)定選項

選項可以是一個陣列,或者Zend_Config對象,或指定位置的設(shè)定檔

引導(dǎo)程式

Zend_Application的第二個功能就是引導(dǎo)應(yīng)用,Bootstraps 必須實作Zend_Application_Bootstrap_Bootstrapper介面, 特定介面API:

apireee

api資源,以及引導(dǎo)程式

你可以實作介面或是繼承Zend_Application_Bootstrap_BootstrapAbstract,或Zend_Application_Bootstrap_Bootstrap.

資源方法

實作Zend_Applited且必須遵循will開頭.

如果要載入使用一個資源方法,在bootstrap()中加入資源名稱即可,資源名稱是資源方法去掉_init前綴。

如果要載入使用多個資源方法,可以透過陣列指定。

例如bootstrap class:

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();
}

只載入使用_initFoo()? :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initFoo()
  {
    // ...
  }
  protected function _initBar()
  {
    // ...
  }
  protected function _initBaz()
  {
    // ...
  }
}

載入使用_initFoo() and _initBar() :

$bootstrap->bootstrap('foo');

載入使用全部資源方法,使用無蟎

新first_web專案


root@coder-671T-M:/mydev_src/zend_framework_learn/www# tree first_web/
first_web/
├── appli
p
│?? │?? └ ── application.ini
│?? ├── controllers
│?? │?? ├── ErrorController.php
│?? │?── views
│?????? ├── helpers
│?????? └ ── scripts
│?????????? ├── error
│??????????
│?????????????? └── index.phtml
├── docs
│?? └── README.txt
├── public
│?? └── index.php
└── tests
??? ├── application
??? │?Test.php
??? ├── bootstrap.php
??? ├── library
└── phpunit.xml
16 directories, 11 files

較新版的zend framework引進了Zend_Application和Bootstrap。 Zend_Application 提供了一個可重複使用資源的引導(dǎo),通用和模組化的引導(dǎo)類別和依賴檢查。 同時預(yù)設(shè)負責設(shè)定 PHP 環(huán)境變數(shù)和自動載入功能。

預(yù)設(shè)新建專案後,會給予以下的幾個檔案:

1.專案的Bootstrap

first_web/

├──application

│?? ├— Bootstrap.. .設(shè)定檔

│ ├── 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(&#39;APPLICATION_PATH&#39;)
  || define(&#39;APPLICATION_PATH&#39;, realpath(dirname(__FILE__) . &#39;/../application&#39;));
// Define application environment
defined(&#39;APPLICATION_ENV&#39;)
  || define(&#39;APPLICATION_ENV&#39;, (getenv(&#39;APPLICATION_ENV&#39;) ? getenv(&#39;APPLICATION_ENV&#39;) : &#39;production&#39;));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
  realpath(APPLICATION_PATH . &#39;/../library&#39;),
  get_include_path(),
)));
/** Zend_Application */
require_once &#39;Zend/Application.php&#39;;
// Create application, bootstrap, and run
$application = new Zend_Application(
  APPLICATION_ENV,
  APPLICATION_PATH . &#39;/configs/application.ini&#39;
);
$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  = &#39;&#39;;
      if (array_key_exists(&#39;title&#39;, $options)) {
        $title = $options[&#39;title&#39;];
        unset($options[&#39;title&#39;]);
      }
      $view = new Zend_View($options);
      $view->doctype(&#39;XHTML1_STRICT&#39;);
      $view->headTitle($title);
      $view->headLink()->appendStylesheet(&#39;/css/site.css&#39;);
      $view->headScript()->appendfile(&#39;/js/analytics.js&#39;);
      $viewRenderer =
        Zend_Controller_Action_HelperBroker::getStaticHelper(
          &#39;ViewRenderer&#39;
        );
      $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(
  &#39;resources&#39; => array(
    &#39;FrontController&#39; => array(
      &#39;controllerDirectory&#39; => APPLICATION_PATH . &#39;/controllers&#39;,
    ),
  ),
));

"FrontController"資源是個特例。他的選項比較特殊。

無論是使用自己的寫的資源插件還是使用第三方的資源插件。你必須保證bootstrap能找到他們,bootstrap 內(nèi)部通過 Zend_Loader_PluginLoader可以讓我們只需要指定資源插件的類前綴,值為資源類的類路徑便可以輕松注冊資源插件。

例如,如果編寫的資源插件存放在APPLICATION_PATH/resources/ 下,類前綴為My_Resource. 可以使用如下方法注冊加載:

$application = new Zend_Application(APPLICATION_ENV, array(
  &#39;pluginPaths&#39; => array(
    &#39;My_Resource&#39; => APPLICATION_PATH . &#39;/resources/&#39;,
  ),
  &#39;resources&#39; => array(
    &#39;FrontController&#39; => array(
      &#39;controllerDirectory&#39; => APPLICATION_PATH . &#39;/controllers&#39;,
    ),
  ),
));

在應(yīng)用程序中比可以使用指定目錄下的資源。

和資源方法類似,通過使用 the bootstrap() 方法可以加載資源插件。加載單一,多個,全部的資源插件的配置方式也類似.

例如:

// Execute one:
$bootstrap->bootstrap(&#39;FrontController&#39;);
// Execute several:
$bootstrap->bootstrap(array(&#39;FrontController&#39;, &#39;Foo&#39;));
// Execute all resource methods and plugins:
$bootstrap->bootstrap();

資源注冊表

為了避免資源的重復(fù)注冊,導(dǎo)致不必要的浪費Zend_Application_Bootstrap_BootstrapAbstract 提供了一個本地注冊表對象存儲這些資源對象.當你想要存放一個資源的時候,只需要在方法中返回這個資源即可。

為了靈活性,注冊表是作為一個內(nèi)部“容器”存在的。只要是對象都可以存入到容器中。資源名稱對應(yīng)為容器的屬性。默認情況下,可以通過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(&#39;view&#39;)) {
  $view = $bootstrap->getResource(&#39;view&#39;);
}
// 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(&#39;bootstrap&#39;);
    $view = $bootstrap->getResource(&#39;view&#39;);
    // ...
  }
}

為了防止重復(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(&#39;FrontController&#39;);
    // Retrieve the front controller from the bootstrap registry
    $front = $this->getResource(&#39;FrontController&#39;);
    $request = new Zend_Controller_Request_Http();
    $request->setBaseUrl(&#39;/foo&#39;);
    $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)!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)