Загрузка альтернативных реализаций классов в Zend (1.11) - PullRequest
1 голос
/ 25 ноября 2011

Можно ли переопределить существующие определения классов с помощью автозагрузчика, заставляя загрузчик сначала найти мой код и загрузить его вместо кода библиотеки Zend?Так что я могу написать свой собственный Zend_View_Helper_FormText и иметь весь текст Form_Elements, автоматически получающий мою версию вместо версии по умолчанию?

1 Ответ

0 голосов
/ 25 ноября 2011

UPDATE:

Так что я хотел убедиться, что я был прав, так как это было немного, так как я использовал ZF. Следующее сработало у меня из коробки.

Создайте пользовательский YourNamespace_Application_Resource_View в LIBRARY_PATH/YourNamespace/Application/Resource/View с помощью метода 'setHelperPaths` - или как хотите, чтобы вызвать его в конфигурации.

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, вам нужно будет соответствующим образом конвертировать.

Тогда вы просто создаете своего помощника по кутсу с тем же именем, что и тот, которого вы переопределяете. В своем тесте я использовал следующий пример:

<code>// 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__.'
'; вернуть $ xhtml; } }

И тогда это сработало автоматически. Если это не работает для вас, возможно, в миксе есть что-то еще, что вызывает проблемы.


Почему бы вам просто не создать свою собственную реализацию в собственном «пространстве имен» (например, Someguy_View_Helper_FormText), а затем загрузить ее? Если вы поместите его поверх стека вспомогательных путей, загрузчик плагинов будет использовать его вместо версии Zend автоматически .

...