Wir kennen Komponenten und Helfer in CakePHP.
Ich habe eine ABC-Komponente und XYZ-Helfer und beide haben die gleiche Funktion (etwa 2000 Zeilen insgesamt 4000 Zeilen). Es gibt eine Möglichkeit, dieselbe Funktion in Controller- und CTP-Dateien zu verwenden. Es ist nicht gut, dieselbe Funktion 2 mal zu benutzen.
jede Methode, damit ich Component / Helper-Funktion in Helper / Component ohne Neu schreiben verwenden kann?
gleiche Methode in Komponente und Helfer & gt; & gt;
Komponente
class DATAComponent erweitert die Komponente {
%Vor%Helfer
%Vor%Nun, Sie müssen etwas neu schreiben, es wird sich nicht selbst lösen.
CakePHP ist immer noch PHP, Sie können also leicht gängige Muster anwenden, um DRY zu bewahren. Der einfachste Weg wäre wahrscheinlich, die gemeinsame Funktionalität in eine Dienstprogrammklasse zu verschieben, die Ihre Komponente und Ihr Helfer beide intern verwenden können, während sie ihre öffentliche API unverändert lassen.
Einige CakePHP-Helfer machen etwas Ähnliches, zum Beispiel den Zeithelfer.
Merkmale können ebenfalls eine Option sein, je nachdem, wie viele Funktionen geteilt werden und wie viel es ist gebunden an die Verwendung in einer Komponente / Helfer.
Ich würde mit einer Klasse im Lib-Ordner gehen. Es ist ziemlich klar, wie man mit einer Bibliotheksklasse umgeht, die nur statische Methoden hat. Also, ich lasse diesen Fall weg. Eine praktikable Lösung für die Instanziierung der Klasse könnte darin bestehen, sie im Controller zu erstellen und sie in die Registrierung einzutragen. Wenn Sie wirklich auf CakeRequest, CakeResponse und CakeSession zugreifen müssen (beachten Sie, dass CakeSession viele statische Methoden verwendet, so dass Sie oft keine Instanz dieser Klasse benötigen), können Sie diese über den Controller setzen:
%Vor%Von der Ansicht oder einem anderen Ort aus würden Sie dann eine Instanz von MyLib aus der Registrierung erhalten:
%Vor%oder einfach
%Vor%Also, Ihre Klasse wäre so etwas wie:
%Vor%ok Sie wollen eine einzelne Funktion in Komponente und Helfer verwenden, ich kann mir 3 Dinge vorstellen, die Sie tun können:
Option Nr. 3: In Ihrem Hilfsprogramm und in Ihrer Komponente müssen Sie ein Modell importieren, wenn Sie davon ausgehen, dass sich Ihre Funktion in einem Modell "StateList" befindet:
Wie Sie die Funktion des Modells "StateList" in Ihrem Helfer aufrufen, also:
%Vor%Wie Sie die Funktion des Modells "StateList" in Ihrer Komponente aufrufen, also:
%Vor%ans, wenn Sie die gleiche Funktion in einem Controller nur verwenden möchten:
%Vor%Einfache Antwort
Fügen Sie für allgemeine Funktionen in Ihrer Anwendung eine Lib- oder Dienstprogrammklasse hinzu.
app / Lib / MeineKlasse.php
%Vor%Fügen Sie das oben in der Datei hinzu, auf die Sie auf die Funktion zugreifen möchten:
%Vor%Und rufe deine Funktion an, wo immer du willst:
%Vor%Bessere Antwort
Es sieht für mich so aus, als ob Ihr spezifisches Problem darin besteht, dass Sie in der Lage sein wollen, eine Liste von US-Staaten sowohl in Ihrem Controller als auch in Ihrer Sicht zu erhalten. Der beste Weg, dies zu tun, ist eine Datenbanktabelle der US-Bundesstaaten.
Erstellen Sie eine Tabelle in Ihrer Datenbank namens us_states .
Beispiel SQL:
%Vor%Fügen Sie alle Zustände als Daten in diese Tabelle ein. Sie können SQL-Dumps im Internet finden, die das für Sie bereits haben (zB Like this one ).
Erstellen Sie ein USState-Modell in CakePHP.
%Vor%Was Sie dann tun können, ist den Zugriff auf die Zustände von Ihrem Controller aus, indem Sie einfach das Modell verwenden.
%Vor%Und wenn Sie auf diese Zustände in Ihrer Ansicht zugreifen möchten, sollten Sie diese Daten wie normalerweise andere Variablen weitergeben.
Ich könnte mir vorstellen, dass Sie das tun möchten, damit Sie vielleicht ein ausgewähltes Menü mit US-Bundesstaaten haben.
%Vor%Und aus Ihrer Sicht können Sie so ein Auswahlmenü anzeigen:
%Vor%Tags und Links cakephp cakephp-2.0 cakephp-2.3