Was ist die beste Vorgehensweise für die Platzierung von Funktionen, die über mehrere MVC-Ebenen hinweg verwendet werden?
Ich musste kürzlich einige Statistikfunktionen schreiben, die sowohl in der Ansicht als auch im Modell verwendet werden. Wenn ich sie in einen Helfer lege, stecke ich fest damit, Helfer in die Model-Ebene zu laden, was lästig ist, falsch erscheint und komplett bricht, wenn diese Funktionen von einer Aufgabe aufgerufen werden (weil es keinen Standardkontext gibt). Wenn ich sie in das Top-Level lib
-Verzeichnis lege, stehe ich fest, Aufrufe wie Stats::normalPercentile
in der Ansicht zu machen.
Gibt es noch andere Möglichkeiten? Gibt es Kommentare von Symfony, wo solche Funktionen platziert werden sollten?
Bearbeiten Offensichtlich gibt es kein Problem mit statischen Aufrufen in Ansichten. Ich folgerte daraus, dass Symfony ihre Helfer nicht als Klassen schrieb (selbst nach einer bedeutsamen Diskussion ). ) Gibt es in diesem Fall Konventionen, um solche Dateien zu platzieren? Werfen Sie sie einfach in lib/util
?
In Bezug auf Ihre Bearbeitung sind die Helfer von symfony so geschrieben, dass sie die Ansicht mit einer Syntax verstopfen, die weniger technisch orientierten Leuten, die normalerweise mit ein wenig PHP in Kontakt kommen, nicht vertraut ist. Es ist eine Philosophie von Ruby on Rails, die diesen Teil des Frameworks inspiriert hat.
Das Speichern von Dateien in lib/
ist eine persönliche Vorliebe, da es symfony nicht wirklich stört, aber die Nomenklatur würde lib/vendor/yourname
vorschlagen.
Wenn es sich um guten Code handelt, möchten Sie vielleicht eifersüchtig in diesem kleinen yourname
-Verzeichnis wachen ... Wenn es wirklich guten Code gibt, möchten Sie vielleicht packe es und teile es mit anderen :)
Was ist falsch bei statischen Anrufen? Ich denke, es ist perfekt für Hilfsfunktionen (besser als Funktionen, da Sie eine Art Namespace haben).
Es ist ziemlich seltsam, Statistiken in einer Ansicht zu sammeln. Warum machst du es nicht in einer Aktion?
Wahrscheinlich hängt die richtige Antwort von der Art des Problems ab, das Sie lösen möchten (Sie haben nicht erklärt, was genau Ihre Helfer tun sollten). Normalerweise verwende ich solche Helfer für häufige Aufgaben, die keine zusätzlichen Klassen oder Aufrufe benötigen (wie "stripText").
Statistische Berechnungen gehören nicht zur Ansicht. Erwägen Sie, sie der Model-Ebene hinzuzufügen. Das lib/util
oder lib/model
scheint mir in Ordnung zu sein. Zum Beispiel könnten Sie eine Klasse PercentileSequence
haben, die mit Daten gefüttert wurde und in Ihren Ansichten und Aufgaben wie dieser wiederverwendet werden konnte:
Es sollte innerhalb einer Aufgabe gleich sein.