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