Zend Custom Library缩短了命名空间

时间:2013-08-30 02:08:41

标签: zend-framework

首先,我在手机上打字。如果我不能使用编码缩进,我很抱歉。

假设我有一个名为XYZ的自定义库,它位于/ library /下。

我可以将它添加到application.INI中 autoloaderNameSpaces [] =“XYZ”

现在我在这个文件夹/ library / XYZ / fld1 / fld2 / fld3 /下面有一个类Example.php。我知道我可以通过使用来调用它 XYZ_fld1_fld2_fld3_Example.php

但是我如何定义一个缩短的命名空间,例如“Short”,所以我可以通过使用来调用这个文件 Short_Example.php

再次感谢并抱歉记错了。

1 个答案:

答案 0 :(得分:0)

要执行您必须使用插件加载器的功能。使用插件加载器加载类。

这是一个加载器类,用于在/ library / Xyz / Fld1 / Fld2 / Fld3 /目录中加载自定义类

这是一个代码示例。

<?php
class Xyz_Core
{
  /**
   * File name Core.php inside Xyz directory
   * 
   * Loader for parsers
   * 
   * @var Zend_Loader_PluginLoader
   */
  protected $_pluginLoader;


  /**
   * Gets the plugin loader
   * 
   * @return Zend_Loader_PluginLoader
   */
  public function getPluginLoader()
  {
    if( null === $this->_pluginLoader )
    {
      $this->_pluginLoader = new Zend_Loader_PluginLoader(array(
        'Xyz_Fld1_Fld2_Fld3_' => 'XYZ/fld1/fld2/fld3/'
      ));
    }

    return $this->_pluginLoader;
  }

  /**
   * Get a helper
   * 
   * @param string $name
   */
  public function getHelper($name)
  {
    $name = $this->_normalizeHelperName($name);
    if( !isset($this->_helpers[$name]) )
    {
      $helper = $this->getPluginLoader()->load($name);
      $this->_helpers[$name] = new $helper;
    }

    return $this->_helpers[$name];
  }

  /**
   * Normalize helper name
   * 
   * @param string $name
   * @return string
   */
  protected function _normalizeHelperName($name)
  {
    $name = preg_replace('/[^A-Za-z0-9]/', '', $name);
    //$name = strtolower($name);
    $name = ucfirst($name);
    return $name;
  }
}

$api = new Xyz_Core();
/*
 * To load object of class Example.php
 */
$obj = $api->getHelper('Example');
/*
 * Or To load include the file only of class Example.php
 */
$class = $api->getPluginLoader()->load('Example');
$obj = new $class($param1, $param2, $etc);