程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> Zend Framework教程之Application用法實例詳解

Zend Framework教程之Application用法實例詳解

編輯:PHP綜合

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

Zend_Application是Zend Framework的核心組件。Zend_Application為Zend Framework應用程序提供基本功能,是程序的入口點。它的主要功能有兩個:裝載配置PHP環境(包括自動加載),並引導應用程序。

通常情況下,通過配置選項配置Zend_Application構造器,但也可以完全使用自定義方法配置。以下是兩個使用用例。

Zend_Application配置選項

構造函數:

/**
 * Constructor
 *
 * Initialize application. Potentially initializes include_paths, PHP
 * settings, and bootstrap class.
 *
 * @param string          $environment
 * @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options
 * @throws Zend_Application_Exception When invalid options are provided
 * @return void
 */
public function __construct($environment, $options = null)
{
  $this->_environment = (string) $environment;
  require_once 'Zend/Loader/Autoloader.php';
  $this->_autoloader = Zend_Loader_Autoloader::getInstance();
  if (null !== $options) {
    if (is_string($options)) {
      $options = $this->_loadConfig($options);
    } elseif ($options instanceof Zend_Config) {
      $options = $options->toArray();
    } elseif (!is_array($options)) {
      throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array');
    }
    $this->setOptions($options);
  }
}

Zend_Application配置方法

1.使用配置文件
2.使用配置數組

常見配置選項

Option Description phpSettings

用於配置php.ini選項,要求是數組,數組的鍵應該是選項的的key.

includePaths

把附加的路徑加入到include_path,要求是數組

autoloaderNamespaces

給Zend_Loader_Autoloader注冊附加命名空間,為數組

bootstrap

可以是設置bootstrap引導類的路徑的字符串,也可以是數組,數組元素要求為 'path' 和 'class'


注意:

選項名稱不區分大小寫。

Zend_Application的方法

Method Return Value Parameters Description __construct(
$environment, 
$options = null) Void
  • $environment: 必填。 表示當前應用環境的String。

    典型的字符串可能包括 "development", "testing", "qa", or "production",他們必須已經被定義。

    對應於配置文件文件中相關章節。

  • $options可選的,參數類型可能是:

    • String :  指定Zend_Config 文件的配置路徑. $environment 用於指定配置文件的哪一個章節

      從1.10開始,可以設置多個配置文件路徑,然後會被合並成一個單一的配置文件。

      這樣更靈活,便於重用。

      在這種情況下的key是"config",其值是文件路徑數組。

      注:可以是路徑字符串,或 array("config"=>array("/path1","/path2"[,...]));.

    • Array : 配置應用的關聯數組

    • Zend_Config:配置對象的實例

構造函數。 用於初始化配置對象。   實例化Zend_Loader_Autoloader。

通過傳遞給構造函數選項然後傳遞給setOptions()方法。

getEnvironment() String N/A

獲取環境配置

getAutoloader() Zend_Loader_Autoloader N/A

獲取Zend_Loader_Autoloader實例

setOptions(array $options) Zend_Application
  • $options必填,要求是數組

所有選項都存儲在引用內部,並多次調用該方法來合並選項。

會根據選項生產對於的setter方法。 

例如,選項“phpSettings”對應setPhpSettings()。 

(選項名稱不區分大小寫。)

getOptions() Array N/A


hasOption($key) Boolean
  • $key: 判斷是發有指定的配置

key不區分大小寫。

getOption($key) Mixed
  • $key: 獲取指定的配置選項的值

key不區分大小寫。如果不存在返回 NULL

setPhpSettings(array $settings, $prefix = '') Zend_Application
  • $settings比填.PHP INI 的配置關聯數組.

  • $prefix可選. 為選項添加前綴


setAutoloaderNamespaces(array $namespaces) Zend_Application
  • $namespaces必填

    傳遞命名空間字符串數組,通過Zend_Loader_Autoloader實例注冊


setBootstrap($path, $class = null) Zend_Application
  • $path必填

    可能是Zend_Application_Bootstrap_Bootstrapper實例,

    自舉類路徑字符串, 

    格式為classname => filename的關聯數組,

    或key為“class”和value為“path”的關聯數組。

  • $class可選. 如果 $path 是字符串, $class 類名稱

getBootstrap() NULL |Zend_Application_Bootstrap_Bootstrapper N/A

獲取注冊的bootstrap實例.

bootstrap() Void N/A

調用 bootstrap的bootstrap() 引導應用.

run() Void N/A

調用bootstrap的 run()運行應用

配置舉例:

默認:

// Create application, bootstrap, and run
$application = new Zend_Application(
  APPLICATION_ENV,
  APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
      ->run();

源代碼

<?php
class Zend_Application
{  /**
   * Constructor
   *
   * Initialize application. Potentially initializes include_paths, PHP
   * settings, and bootstrap class.
   *
   * @param string          $environment
   * @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options
   * @throws Zend_Application_Exception When invalid options are provided
   * @return void
   */
  public function __construct($environment, $options = null)
  {
    $this->_environment = (string) $environment;
    require_once 'Zend/Loader/Autoloader.php';
    $this->_autoloader = Zend_Loader_Autoloader::getInstance();
    if (null !== $options) {
      if (is_string($options)) {
        $options = $this->_loadConfig($options);
      } elseif ($options instanceof Zend_Config) {
        $options = $options->toArray();
      } elseif (!is_array($options)) {
        throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array');
      }
      $this->setOptions($options);
    }
  }
  /**
   * Retrieve current environment
   *
   * @return string
   */
  public function getEnvironment()
  {
    return $this->_environment;
  }
  /**
   * Retrieve autoloader instance
   *
   * @return Zend_Loader_Autoloader
   */
  public function getAutoloader()
  {
    return $this->_autoloader;
  }
  /**
   * Set application options
   *
   * @param array $options
   * @throws Zend_Application_Exception When no bootstrap path is provided
   * @throws Zend_Application_Exception When invalid bootstrap information are provided
   * @return Zend_Application
   */
  public function setOptions(array $options)
  {
    if (!empty($options['config'])) {
      if (is_array($options['config'])) {
        $_options = array();
        foreach ($options['config'] as $tmp) {
          $_options = $this->mergeOptions($_options, $this->_loadConfig($tmp));
        }
        $options = $this->mergeOptions($_options, $options);
      } else {
        $options = $this->mergeOptions($this->_loadConfig($options['config']), $options);
      }
    }
    $this->_options = $options;
    $options = array_change_key_case($options, CASE_LOWER);
    $this->_optionKeys = array_keys($options);
    if (!empty($options['phpsettings'])) {
      $this->setPhpSettings($options['phpsettings']);
    }
    if (!empty($options['includepaths'])) {
      $this->setIncludePaths($options['includepaths']);
    }
    if (!empty($options['autoloadernamespaces'])) {
      $this->setAutoloaderNamespaces($options['autoloadernamespaces']);
    }
    if (!empty($options['autoloaderzfpath'])) {
      $autoloader = $this->getAutoloader();
      if (method_exists($autoloader, 'setZfPath')) {
        $zfPath  = $options['autoloaderzfpath'];
        $zfVersion = !empty($options['autoloaderzfversion'])
              ? $options['autoloaderzfversion']
              : 'latest';
        $autoloader->setZfPath($zfPath, $zfVersion);
      }
    }
    if (!empty($options['bootstrap'])) {
      $bootstrap = $options['bootstrap'];
      if (is_string($bootstrap)) {
        $this->setBootstrap($bootstrap);
      } elseif (is_array($bootstrap)) {
        if (empty($bootstrap['path'])) {
          throw new Zend_Application_Exception('No bootstrap path provided');
        }
        $path = $bootstrap['path'];
        $class = null;
        if (!empty($bootstrap['class'])) {
          $class = $bootstrap['class'];
        }
        $this->setBootstrap($path, $class);
      } else {
        throw new Zend_Application_Exception('Invalid bootstrap information provided');
      }
    }
    return $this;
  }
  /**
   * Retrieve application options (for caching)
   *
   * @return array
   */
  public function getOptions()
  {
    return $this->_options;
  }
  /**
   * Is an option present?
   *
   * @param string $key
   * @return bool
   */
  public function hasOption($key)
  {
    return in_array(strtolower($key), $this->_optionKeys);
  }
  /**
   * Retrieve a single option
   *
   * @param string $key
   * @return mixed
   */
  public function getOption($key)
  {
  }
  /**
   * Merge options recursively
   *
   * @param array $array1
   * @param mixed $array2
   * @return array
   */
  public function mergeOptions(array $array1, $array2 = null)
  {
    if (is_array($array2)) {
      foreach ($array2 as $key => $val) {
        if (is_array($array2[$key])) {
          $array1[$key] = (array_key_exists($key, $array1) && is_array($array1[$key]))
                 ? $this->mergeOptions($array1[$key], $array2[$key])
                 : $array2[$key];
        } else {
          $array1[$key] = $val;
        }
      }
    }
    return $array1;
  }
  /**
   * Set PHP configuration settings
   *
   * @param array $settings
   * @param string $prefix Key prefix to prepend to array values (used to map . separated INI values)
   * @return Zend_Application
   */
  public function setPhpSettings(array $settings, $prefix = '')
  {
    foreach ($settings as $key => $value) {
      $key = empty($prefix) ? $key : $prefix . $key;
      if (is_scalar($value)) {
        ini_set($key, $value);
      } elseif (is_array($value)) {
        $this->setPhpSettings($value, $key . '.');
      }
    }
    return $this;
  }
  /**
   * Set include path
   *
   * @param array $paths
   * @return Zend_Application
   */
  public function setIncludePaths(array $paths)
  {
    $path = implode(PATH_SEPARATOR, $paths);
    set_include_path($path . PATH_SEPARATOR . get_include_path());
    return $this;
  }
  /**
   * Set autoloader namespaces
   *
   * @param array $namespaces
   * @return Zend_Application
   */
  public function setAutoloaderNamespaces(array $namespaces)
  {
    $autoloader = $this->getAutoloader();
    foreach ($namespaces as $namespace) {
      $autoloader->registerNamespace($namespace);
    }
    return $this;
  }
  /**
   * Set bootstrap path/class
   *
   * @param string $path
   * @param string $class
   * @return Zend_Application
   */
  public function setBootstrap($path, $class = null)
  {
    // setOptions() can potentially send a null value; specify default
    // here
    if (null === $class) {
      $class = 'Bootstrap';
    }
    if (!class_exists($class, false)) {
      require_once $path;
      if (!class_exists($class, false)) {
        throw new Zend_Application_Exception('Bootstrap class not found');
      }
    }
    $this->_bootstrap = new $class($this);
    if (!$this->_bootstrap instanceof Zend_Application_Bootstrap_Bootstrapper) {
      throw new Zend_Application_Exception('Bootstrap class does not implement Zend_Application_Bootstrap_Bootstrapper');
    }
    return $this;
  }
  /**
   * Get bootstrap object
   *
   * @return Zend_Application_Bootstrap_BootstrapAbstract
   */
  public function getBootstrap()
  {
    if (null === $this->_bootstrap) {
      $this->_bootstrap = new Zend_Application_Bootstrap_Bootstrap($this);
    }
    return $this->_bootstrap;
  }
  /**
   * Bootstrap application
   *
   * @param null|string|array $resource
   * @return Zend_Application
   */
  public function bootstrap($resource = null)
  {
    $this->getBootstrap()->bootstrap($resource);
    return $this;
  }
  /**
   * Run the application
   *
   * @return void
   */
  public function run()
  {
    $this->getBootstrap()->run();
  }
  /**
   * Load configuration file of options
   *
   * @param string $file
   * @throws Zend_Application_Exception When invalid configuration file is provided
   * @return array
   */
  protected function _loadConfig($file)
  {
    $environment = $this->getEnvironment();
    $suffix   = pathinfo($file, PATHINFO_EXTENSION);
    $suffix   = ($suffix === 'dist')
           ? pathinfo(basename($file, ".$suffix"), PATHINFO_EXTENSION)
           : $suffix;
    switch (strtolower($suffix)) {
      case 'ini':
        $config = new Zend_Config_Ini($file, $environment);
        break;
      case 'xml':
        $config = new Zend_Config_Xml($file, $environment);
        break;
      case 'json':
        $config = new Zend_Config_Json($file, $environment);
        break;
      case 'yaml':
      case 'yml':
        $config = new Zend_Config_Yaml($file, $environment);
        break;
      case 'php':
      case 'inc':
        $config = include $file;
        if (!is_array($config)) {
          throw new Zend_Application_Exception('Invalid configuration file provided; PHP file does not return array value');
        }
        return $config;
        break;
      default:
        throw new Zend_Application_Exception('Invalid configuration file provided; unknown config type');
    }
    return $config->toArray();
  }
}

更多關於zend相關內容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優秀開發框架總結》、《Yii框架入門及常用技巧總結》、《ThinkPHP入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved