程序员人生 网站导航

Zend Framework教程-Application

栏目:ZendFramework时间:2014-04-03 04:16:18

     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.使用配置数组


常见配置选项   

OptionDescription
phpSettings

用于配置php.ini选项,要求是数组,数组的键应该是选项的的key.

includePaths

把附加的路径加入到include_path,要求是数组

autoloaderNamespaces

给Zend_Loader_Autoloader注册附加命名空间,为数组

bootstrap

可以是设置bootstrap引导类的路径的字符串,也可以是数组,数组元素要求为 'path' 和 'class'


注意:
选项名称不区分大小写。 


Zend_Application的方法

MethodReturn ValueParametersDescription
__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()StringN/A

获取环境配置

getAutoloader()Zend_Loader_AutoloaderN/A

获取Zend_Loader_Autoloader实例

setOptions(array $options)Zend_Application
  • $options必填,要求是数组

所有选项都存储在引用内部,并多次调用该方法来合并选项。

会根据选项生产对于的setter方法。 

例如,选项“phpSettings”对应setPhpSettings()。 

(选项名称不区分大小写。)

getOptions()ArrayN/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_BootstrapperN/A

获取注册的bootstrap实例.

bootstrap()VoidN/A

调用 bootstrap的bootstrap() 引导应用.

run()VoidN/A

调用bootstrap的 run()运行应用

 

配置举例:

默认:

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



源代码

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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐