(Diese Frage nicht über Datenbanken ist. Ich weiß, Datenbanken oft angesehen werden, wenn es um Multi-Tenancy kommt. Aber das ist nicht meine Frage.)eine Multi-Tenant-Anwendung (Struktur)
Ich erstelle eine Anwendung das wird von verschiedenen Kunden verwendet werden. Sie können meist die gleichen Dinge sehen und tun. Einige Kunden haben jedoch hier und da einige zusätzliche Schaltflächen, einige Funktionen sind deaktiviert oder etwas anderes ist anders.
Ich möchte viele If/Else oder Switch-Anweisungen vermeiden. Also dachte ich, dass ich für jeden Kunden ein allgemeines Modul und spezielle Module haben könnte, die nach Bedarf verschiedene Dinge überschreiben oder überschreiben. Schauen Sie sich die folgende theoretische Struktur (alle Dateien sind die normalen Yü-Dateien):
app
general
controllers
OrderController
InvoiceController
ShippingController
views
order
index, view, update, create, _form
invoice
index, view, update, create, _form
shipping
index, view, update, create, _form
layout
main
models
Order
Invoice
Shipping
customerA
controllers
OrderController // some action is different
customerB
views
invoice
view // some buttons should be overridden
layout
main.php // other page structure
customerC
views
order
index // table gets some additional columns
model
Order // has some more properties
customerD
// this customer exists but has nothing that must be changed
// it uses all what is in general
...
web
common
console
...
Ich denke, dies ist eine Tondatei Struktur ist. Zumindest ist es klar und verständlich. Nun möchte ich irgendwie feststellen: Wenn ein Kunde etwas anfordert, wird die Anwendung zuerst schauen, ob es Dateien für den bestimmten Kunden gibt und sie verwendet, oder sie verwendet die Dateien im allgemeinen Modul (Fallback). Meine Frage ist: Wie kann ich das tun?
Wenn es möglich ist, wie? Oder ist es nur teilweise möglich, z.B. nur mit Controllern und Ansichten? Ich nehme an, dass verschiedene Ansätze für View/Controller/Model-Dateien benötigt werden. Ich nehme an, dass das Autoloading von Klassen angepasst werden könnte. Und ich würde denken, das Routing zu nutzen (obwohl der Kunde authentifiziert werden muss, so kann er nur seine eigenen Kunden verwenden):
http://example.com/customerA/invoice/view?id=1234
Kann das alles mit der Konfiguration durchgeführt werden oder mit Dependency Injection? Benötige ich Module oder ist die Dateiorganisation ausreichend?
(Gedanken: Übergeordnete Steuerungen einfach sein könnte, aber ich denke, dass View-Dateien nur dann, wenn der Controller eine andere Ansicht Pfad zu setzen außer Kraft gesetzt wird außer Kraft gesetzt werden kann..)
Hat Ideen jemand dieses Problem zu lösen? Ich würde mich freuen, wenn dies mit Controllern und Views funktioniert. Aber Modelle wären auch nett. Oder hat jemand andere Vorschläge oder alternative Ansätze? Lassen Sie es mich wissen, auch wenn Sie nur Teile der Lösung kennen.
Ich nehme an, eine befriedigende Antwort kann sich mit der Zeit entwickeln. Aber es wäre hilfreich für andere, eine gute Lösung zu finden. Lasst uns daran arbeiten ;-) ... Oder ist ein anderes Framework für diese Aufgabe besser geeignet? :-(