在zend中加载替代类实现(1.11)

时间:2011-11-25 01:11:12

标签: zend-framework zend-form

是否可以使用自动加载器覆盖现有的类定义,使加载器首先找到我的代码并加载它而不是zend库代码?这样我就可以编写自己的Zend_View_Helper_FormText并让所有文字Form_Elements自动获取我的版本而不是默认版本?

1 个答案:

答案 0 :(得分:0)

<强>更新

所以我想确保我是正确的,因为它已经使用了ZF。以下为我开箱即用。

使用'setHelperPaths`方法在YourNamespace_Application_Resource_View中创建自定义LIBRARY_PATH/YourNamespace/Application/Resource/View - 或者在配置中调用它的任何内容。

class YourNamespace_Application_Resource_View extends Zend_Application_Resource_View
{
   public function setHelperPaths($paths){
     if(!empty($paths)){
       $view = $this->getView();
       foreach($paths as $ns => $path) {
          $view->addHelperPath($path, $ns);
       }
     }
   }
}

然后在你的配置中做一些像:

all:
  pluginPaths:
    'YourNamespace_Application_Resource_': <?php echo LIBRARY_PATH ?>/YourNamespace/Application/Resource

  resources:
    view:
      helperPaths:
        'YourNamespace_View_Helper': <?php echo LIBRARY_PATH ?>/YourNamespace/View/Helper

显然,这并没有完全取代你已配置的任何东西......除此之外。此外,我在Zend_Tool中设置了我的项目生成器,使用YAML(使用sfYaml)作为我的配置格式,因此如果使用INI或XML,则需要进行适当的转换。

然后你只需创建你的cutom助手,其名称与你要覆盖的zend名称相同。我在测试中使用了以下示例:

// File in LIBRARY_PATH/YourNamespace/View/Helper/FormText.php
class YourNamespace_View_Helper_FormText extends Zend_View_Helper_FormText
{
   public function formText($name, $value = null, $attribs = null)
   {
      $xhtml = parent::formText($name, $value, $attribs);
      $xhtml .= '<br /> <pre>'.__CLASS__.'</pre>';
      return $xhtml;
   }
}

然后它自动运作。如果它对你不起作用,那么混合中可能还有其它东西会给它带来问题。


为什么不在自己的“命名空间”(例如Someguy_View_Helper_FormText)中创建自己的实现,然后加载? If you put it on top of the helper path stack the plugin loader will use that instead of the Zend version automatically