Zwei Gedanken, wo Ihre benutzerdefinierten Aktion-Helfer platzieren:
- In einer separaten, kundenspezifische Bibliothek
- im Ordner
application/controllers/helpers
Diese Ideen sind nicht exklusiv. Funktionalität, die allgemein genug ist, um in mehreren Projekten zu arbeiten, sollte wahrscheinlich in eine separate Bibliothek gezogen werden. Aber für Funktionalität, die anwendungsspezifisch ist, gibt es ein Argument, dass es irgendwo im Ordner application
sein könnte.
@Jurian hat bereits den Ansatz der "separaten Bibliothek" beschrieben. Für App-spezifische Helfer können Sie Folgendes tun:
Für einen Helfer namens myHelper, erstellen Sie eine Klasse Application_Controller_Helper_MyHelper
in der Datei application/controllers/helpers/MyHelper.php
. In Bootstrap
, haben Sie so etwas wie:
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Application',
'basePath' => APPLICATION_PATH,
));
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH . '/controllers/helpers',
'Application_Controller_Helper_');
return $autoloader;
}
Dann können Sie Ihre Helfer in einem Controller aufgerufen werden unter Verwendung von:
$this->_helper->myHelper;
Wie Sie sehen können, dies setzt voraus, Sie verwenden appNamespace 'Anwendung'. Wenn nicht, können (müssen) Sie Ihre Klassennamen ändern, um Ihren Umständen gerecht zu werden.
Prost!
Kleiner Hinweis, da Sie den Pfad mit 'APPLICATION_PATH' beginnen, sollte Ihre '/ application/controllers/helpers' beim Start einfach '/ controllers/helpers' ohne'/application' sein. Außerdem habe ich festgestellt, dass das Präfix "Application_Controller_Helper_" nicht notwendigerweise mit der physischen Ordnerstruktur übereinstimmen muss. Wenn Sie das Präfix (zweiter Parameter) als 'Blabla_' setzen, funktioniert die Aktionshelferklasse nur mit' Blabla_Helpername'. Dies hilft, die Klassennamen zu reduzieren, wenn das etwas ist, das dir wichtig ist. und natürlich +1 für eine gute Antwort. – jblue
D'oh! Du hast Recht: Der 'application' Pfad ist bereits in APPLICATION_PATH enthalten. Es tut uns leid. Korrigiere meine Antwort. Sie haben natürlich auch recht: Da Sie das Mapping im Aufruf 'addPath()' definieren können, können Sie nahezu beliebige Klassennamen verwenden. Ich neige dazu, die Zend-Struktur in meinem eigenen Bibliotheksnamensraum nachzuahmen, auch wenn sie etwas länger sind. Zum Beispiel benenne ich normalerweise ein Plugin als 'My_Controller_Plugin_SomePlugin', aber ich sehe oft, dass andere etwas wie' My_Plugin_SomePlugin' verwenden. Wie Sie sehen, funktioniert jeder Weg so lange, wie Ihr 'addPath()' Aufruf es korrekt abbildet. Danke und Prost! ;-) –