Schnelle Frage: Wo sollte ich Code einfügen, der ähnliche Eigenschaften wie die Controller Utilities Service Class hat, wie hier in diesem Blogbeitrag von Benjamin Eberlei ( Ссылка )?
In der Zwischenzeit habe ich es eingefügt: src / ProjectName / Library
Kontext
Ich habe folgendes bemerkt:
Ich habe einige Antworten auf Fragen gefunden, die thematisch ähnlich sind, aber nicht genau das, wonach ich gesucht habe
Nach meinen Recherchen hier auf SO allein scheint diese Frage etwas zu Tode getreten zu sein, aber ich denke, die Fragen, die zuvor gestellt wurden, gehen um, worum es eigentlich geht. Unabhängig davon scheint es, dass ich die folgenden Optionen habe:
Noch einmal kurz die Frage: Wo gebe ich Klassen an, die generische, globale Funktionalität in Symfony 2 bieten?
Mein Dank im Voraus.
Diese Dokumentation über Composer-Repositories ist eine großartige Referenz und der Dokumentation zu Paketen, die Composer nicht unterstützen sollte das sein, wonach Sie suchen.
Ich möchte auch die Dokumentation zu VCS zur Kenntnis nehmen, die oft bei Bedarf verwendet wird fork a Bundle und überschreibe das Original (ich habe es einige Male benutzt).
Sie können Folgendes tun - Sie brauchen kein Verpackungssystem oder was auch immer. Sie müssen das Paket nur als Zip-Datei bereitstellen, auf die Ihr Computer über eine URL zugreifen kann.
%Vor%Wenn Ihr Paket PSR-0 nicht unterstützt, müssen Sie die Option "classmap" Wenn Ihr Paket PSR-0 unterstützt, müssen Sie die Option bsr-0 verwenden.
Nach einigem Herumalbern, während die akzeptierte Antwort hier einen Verdienst hat, habe ich beschlossen, ein "Core" -Bündel zu erstellen, in dem alle meine Projekte übergreifende / anwendungsweite Abhängigkeiten und Ressourcen enthalten.
Dies ermöglicht es mir, einen zentralen Platz für alle Assets, verbundene Entitäten und projektspezifischen Bibliothekscode zu haben.
Zum Refactoring positioniert
Ich habe innerlich mit mir selbst begründet, dass dies eine glückliche mittelfristige (vielleicht temporäre) Lösung ist, die es mir erlaubt, mit der Entwicklung fortzufahren und nicht mit der Analyseparalyse, in der ich mich gerade befinde.
Wenn ich die Dinge auf diese Weise mache, kann ich die Flex-Punkte später in die Händlerverzeichnis-Lösung umwandeln.
Wenn Sie an einem Projekt arbeiten und durch das etwas unnatürliche Gefühl verärgert sind, dass Ihre Entitäten und Ihr Bibliothekscode in verschiedenen Bündeln verstreut sind wie ich, wäre dies eine gute Lösung.
Es ändert nicht das Standardverhalten von SF2 und Doctrine 2
Ich habe zuvor eine Modifikation der Konfiguration von Symfony 2 Doctrine 2 implementiert, die es mir erlaubte (zu Recht) Entitäten aus dem Bundle und in einen separaten, zentralen Namespace zu entfernen.
Ich mochte diese Idee. Ich habe es eine Weile benutzt. Der Nachteil bei diesem Ansatz besteht darin, dass Sie die Befehlszeilenschnittstelle nicht mehr verwenden können, wenn Sie schnell eine Doktrinentität als Bundle-Namespace erstellen möchten.
Ich dachte, es wäre in Ordnung, weil ich die Dinge sowieso ändern müsste, aber dann dachte ich:
Auf halbem Wege schreibe ich noch eine weitere Frage "wo soll ich XXXX in Symfony 2 setzen" (ich bin sicher, dass die Leute, die den PHP- und Symfony2-Tags folgen, nicht sehen können), ich habe aufgehört und sie in ein Bündel gelegt Ich habe das Assets-Paket aufgerufen und es in Core-Paket umbenannt.
Das Core-Paket Auf diese Weise ist es in einem Bundle gemäß der CLI-Anforderung, es ist viel einfacher zu folgen und ich kann den Inhalt dieses Bundles semantisch teilen, da es Core-Code enthält, der für die Anwendung spezifisch ist:
Am wichtigsten ist, wenn ich Zeit habe, mich hinzusetzen und mit Composer et al zu arbeiten, kann ich das leicht umschreiben, weil alles an einem Ort existiert.
Also. In einer Nussschale. Um meine eigene Frage zu beantworten: Wo füge ich generischen Bibliothekscode in Symfony 2 ein?
Ich würde es in ein Paket einfügen, das speziell zum Speichern von Assets, Ressourcen und Bibliothekscode erstellt wurde, auf das mehrere Pakete mithilfe der folgenden Empfehlungen zugreifen können:
Packen und installieren Sie über Composer
Recherchieren Sie, wie Sie Ihre Dateistruktur so formatieren, dass sie PSR-0-konform ist, wenn Sie anfangen, composer zu verwenden:
Die Anwendung / das Projekt - Bundles, die die Anwendung erstellen, sich aber auf das Core Bundle verlassen.
Core Bundle - Erweitert SF2 an wichtigen Punkten, enthält gemeinsame Ressourcen und Bibliothekscode. Da ich die Funktionsweise des Frameworks nicht geändert habe, sind die Dateien dort, wo SF2 sie erwartet. Das bedeutet, dass ich immer noch seine Generatoren für Entitäten verwenden kann.
Ich werde kein Problem damit haben, dass hier Scaffolding / CRUD-Bildschirme erzeugt werden, da diese als Prototypen betrachtet werden und keine echten Anwendungsfunktionen.
SF2 Layer. - bleibt unverändert unverändert. Erweitert.