Die View-Verwaltung verfügt über eine eigene Auflösung von Namespaces für die Viewhelper. Diese Auflösung wird mit Plugin-Loader-Klassen erledigt, im Gegensatz zu Resource-Loader-Klassen, die für die Auflösung von Klassennamen zuständig sind.
Wird ein Viewhelper angefordert, so versucht die View den Helper zuerst mit den Plugin-Loadern zu ermitteln, erst danach werden die Resource-Loader verwendet. Der Vorteil der Plugin-Loader ist neben dem (geringfügigen) Geschwindigkeitsgewinn auch die Möglichkeit, die vorgegebenen Viewhelper-Pfade besser zu manipulieren.
Aber gerade hier entsteht ein Problem, denn meist werden die Viewhelper nur über die Plugin-Loader gefunden, um aber eine Basis-Klasse zu finden braucht man zusätzlich einen entsprechenden Resource-Loader.
In dem Beispiel unten erweitere ich den Helper-Path des View-Helper, und gebe damit dem Plugin-Loader einen direkten Zugriff zu den Viewhelpern. Danach erweitere ich den Resource-Loader, um in weiteren Pfaden nach Viewhelpern zu diesem Namespace zu suchen. Damit kann ich zB Vererbung von Viewhelpern sicherstellen.
Der Code steht in einer beliebigen Methode in der Bootstrap.
$resourceView = $this->getPluginResource('view');
$resourceView->setOptions(array( 'helperPath' => array( 'Cross_View_Helper' => APPLICATION_PATH . '/layouts/views/helpers/')));
$resourceLoader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => 'Cross_'));
$resourceLoader->addResourceType('myHelper',
'layouts/views/helpers/', 'View_Helper');
Tags: Viewhelper
