Zend Viewhelper und Resource-Autoloader

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:

Kommentiere den Artikel

Sie müssen registriert sein, um Kommentare schreiben zu können.