2012-04-26 5 views
1

У меня есть следующий код:Как я могу отдать приоритет одному помощнику в Zend Framework?

public function _setHelpers() { 
     Zend_Controller_Action_HelperBroker::addPrefix('My_Controller_Action_Helpers'); 
     Zend_Controller_Action_HelperBroker::addPath (APPLICATION_PATH . '/controllers/helpers'); 
    } 

С этим я могу добавить помощника Wether в My/Controller/Action/Помощники/helper.php или /application/controllers/helpers/Helper.php. Это нормально, однако мне нужно отдавать приоритет тому, который находится в/application /, то есть: если у меня есть оба помощника, загрузите один из них в/приложение, а не тот, который находится в My/Controller/...

РЕДАКТИРОВАНИЕ

я был в состоянии исправить это путем изменения кода на это:

public function _setHelpers() { 
    $prefix = 'My_Controller_Action_Helpers'; 
    Zend_Controller_Action_HelperBroker::addPrefix ($prefix); 
    Zend_Controller_Action_HelperBroker::addPath (APPLICATION_PATH . '/controllers/helpers', 'My_Controller_Action_Helper'); 
    return $this; 
} 

Как вы можете заметить, его почти то же самое, с той разницей, что при добавлении пути я добавил также префикс. Спасибо всем за вашу помощь.

ответ

1

Пули плагинов, добавленные в брокер-помощник, используют Zend_Loader_PluginLoader, который использует стеки LIFO для путей, так что последний добавленный путь - первый проверенный. Учитывая ваш код, так как вы добавляете application путь второй, он должен иметь приоритет над файлами в My/Controller (как addPrefix и addPath вызова тот же метод в Zend_Loader_PluginLoader поэтому они эффективно то же самое.

Разве это не то, что вы ? находят

+0

На самом деле нет, у меня есть эти два кода: класс 'My_Controller_Action_Helpers_Noticia расширяет My_Controller_Action_Helper_Abstract { \t защищенная функция _direct() { \t \t эхо 1; \t}} класс My_Controller_Action_Helper_Noticia расширяет Busca_Controller_Action_Helpers_Noticia { \t защищенная функция _direct() { \t \t эхо 2; \t} } ' Первый мой/Controller/... и второй один в контроллерах/Помощники/ И это показывает 1 в представлении ... – Cito

+0

В этом случае причина в том, что один из классы не называются правильно, поэтому они не будут загружены. В зависимости от вашего префикса приложения, я думаю, вы должны изменить его в 'Controllers/Helpers', который будет называться' Busca_Controller_Action_Helper_Noticia', и убедитесь, что это «приложение/контроллеры/действие/помощники/Noticia.php» – drew010

+0

. Дело в том, что все было в порядке, проблема была другая, но я уже понял это. Спасибо за вашу помощь, вы даете мне ключ к ее исправлению (поскольку я печатал префикс, добавляемый в Zend_Controller_Action_HelperBroker :: getPluginLoader() -> getPaths(), и таким образом я увидел необходимость добавления также префикса в addPath) Большое спасибо! – Cito