2011-01-15 6 views
9

Ich lerne, wie man Zend Framework verwendet und erkennen, dass der Aktionshelfer etwas ist, das nützlich wäre. Ich habe eine Standardinstallation von Zend auf meinem Rechner eingerichtet, aber ich weiß nicht, wohin die Hilfsdatei gehen soll, was ich in die Bootstrap-Datei schreiben muss und wie ich sie benutze. Kann mir bitte jemand in die richtige Richtung zeigen - das ZF-Benutzerhandbuch ist mir nicht zu klarmachen.Zend Action Helfer

Dank John

Antwort

16

Zwei Gedanken, wo Ihre benutzerdefinierten Aktion-Helfer platzieren:

  1. In einer separaten, kundenspezifische Bibliothek
  2. 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!

+0

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

+0

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! ;-) –

6

Sie können Aktion Helfer in Ihrer eigenen Bibliothek platzieren. Neben Bibliothek/Zend, wo alle Zend-Sachen herumliegen, kannst du einen Bibliothek/MyLibrary-Ordner erstellen (MyLibrary ist beliebig gewählt) und dort die Aktionshelfer platzieren.

Ein guter Platz ist der Bibliothek/MyLibrary/Controller/Action/Helper-Ordner, den Sie erstellen und platzieren Sie Ihre Aktion Helfer dort (z. B. Navigation.php). Erstellen Sie in dieser Datei die Klasse MyLibrary_Controller_Action_Helper_Navigation.

Der nächste Schritt ist das Hinzufügen des Aktionshelfers zum HelperBroker des Zend Framework während des Bootstrap. Daher eine neue Methode in Ihrer Bootstrap.php-Datei erstellen und diese Funktion hinzufügen:

protected function _initActionHelpers() 
{ 
    Zend_Controller_Action_HelperBroker::addHelper(
     new MyLibrary_Controller_Action_Helper_Navigation() 
    ); 
} 

Eine letzte Bemerkung ist, dass Sie durch das Hinzufügen dieser Regel application.ini Verwendung dieser Bibliothek konfigurieren müssen:

autoLoaderNameSpaces[] = "MyLibrary_" 
1

Sie können Ihre application.ini Datei tun dies durch wie so

resources.view[] = 
resources.view.helperPath.Default_View_Helper_ = APPLICATION_PATH "/views/helpers/" 

Dann in Ihrem views/helpers Pfad einer Datei wie Time.php erstellen können.Diese Datei enthalten würde den folgenden Code:

<?php 

class Default_View_Helper_Time extends Zend_View_Helper_Abstract 
{ 
    public function time() 
    { 
     $date = new Zend_Date(); 

     return $date->get(Zend_Date::TIME_MEDIUM); 
    } 
} 

?> 

Um dies zu Ihrer Ansicht Skripte verwenden würden Sie verwenden

<?=$this->time()?> 

, die die aktuelle Zeit anzeigen würde mit Ihrem neuen View_Helper

+0

-1 wie op spricht über aktionshelfer, nicht anzeigen helfer – jackocnr

+0

hallo wie kann ich aufrufen helper auf meinem application controller helper ..? – d3bug3r

0

können Sie vermeiden, Registrieren Sie Ihren Aktions-Helper-Namespace und Pfad innerhalb der Bootstrap.php indem Sie sie in der stattdessen wie folgt deklarieren:

resources.frontController.actionHelperPaths.My_Controller_Action_Helper = APPLICATION_PATH "/controllers/helpers" 

Ersetzen Sie einfach My_Controller_Action_Helper durch Ihren gewünschten Namespace, und ändern Sie den Verzeichnispfad des Helpers entsprechend.

Der Helfer kann auf die gleiche Weise initialisiert werden:

$this->_helper->myHelper; 

Wie durch die docs erwähnt, wird das Präfix oder den Pfad der Helfer Registrierung in der Regel bevorzugt, weil Helfer nicht initialisiert werden würde, bis sie wie in der heißen Schnipsel oben.

Natürlich Instanziieren und Helfer an den Broker ist ein bisschen Zeit und ressourcenintensiv, so dass zwei Methoden gibt, Dinge zu automatisieren leicht: addPrefix() und addpath().

http://framework.zend.com/manual/1.12/en/zend.loader.pluginloader.html

den Config-Eintrag in die application.ini Hinzufügen folgt das gleiche Muster vorgeschlagen.

Verwandte Themen