Ich verwende das Slim Framework für eine einfache Anwendung im Crud-Stil. Meine index.php-Datei ist ziemlich lang und unhandlich mit all den verschiedenen Routen geworden. Wie kann ich diesen Code aufräumen / umgestalten? Zum Beispiel habe ich Code wie folgt für alle verschiedenen Routen und GET, POST, PUT, DELETE etc.
%Vor%Was ich tun möchte, ist das Gruppieren von Routen, und für jede Gruppe erstelle ich eine neue Datei unter einem Unterverzeichnis namens routes. Um dies anhand eines Beispielcodes aus der Slim-Dokumentation zu veranschaulichen:
index.php:
%Vor%routes / api.php:
%Vor%Sie können dies sogar für mehrere Ebenen tun, seien Sie nur sicher, dass Sie sich dafür nicht zu sehr verkomplizieren.
Sie können dies natürlich auch für Haken tun.
Sie können zum Beispiel den inneren Code in die Klasse verschieben:
%Vor%oder erstellen Sie sogar Ihre eigene Klasse, die das Routing behandelt
%Vor%und dann in Ihrer index.php
%Vor%Sie können index.php Inhalte in verschiedene Dateien verschieben und einfach einbinden. Zum Beispiel:
index.php:
%Vor%routes.php:
%Vor%Sie können sogar verschiedene Dateien für verschiedene Routentypen erstellen:
index.php:
%Vor%Das selbe Vorgehen ist auch in Ordnung für DI-Dienste-Initialisierung usw. (alles aus Ihrer index.php)
So benutze ich Slim. Ich habe eine einzelne Datei mit den Routen, aber ich verwende einen Drei-Ebenen-Ansatz.
index.php - hier gehe ich nicht mit Logik um. Ich registriere nur die Routen und konsumiere die API-Methoden (post, put, delete, etc).
%Vor%Die API-Ebenen erben eine Basisklasse, in die das schlanke App-Objekt injiziert wird. Von dort verwende ich Hilfsmethoden, um die Daten von Anfragen zu extrahieren, die Felder mit den erforderlichen Feldern, optionalen Feldern, etc. verwenden. Ich führe Validierung hier nicht durch. Hier bereinige ich auch die Anfragen für xss.
Am wichtigsten, ich behandle die Ausnahmen hier. Bei ungültigen Anforderungen werden Ausnahmen ausgelöst, die in einer Fehlerantwort abgefangen und umgewandelt werden.
%Vor%Diese Schichtklasse verbraucht die Business-Schichten, die Repositories und andere Ressourcen verwenden. Ich teste die Projekte gegen die Business-Schichten, die API-Schichten extrahieren einfach die Daten, erstellen die DTO-Modelle und behandeln die Antwort.
Die Request / Response-Modelle implementieren Schnittstellen, um einen Statuscode zurückzugeben, und erros-Nachrichten, die für die Clients konsumiert werden (Respekt ist cool, dies zu automatisieren).
%Vor% Ich möchte Klassen als Routenrückrufe verwenden und diese mit der Gruppierung von Routen kombinieren. Dadurch wird Ihre index.php
-Datei (oder wo immer Sie Ihre Routen definieren) wahrscheinlich sehr "Slim":
In diesem Beispiel ruft die Route /user/find/:id
die Methode search
auf (übergibt den Wert von :id
als ersten Parameter) der Klasse User
. So könnte Ihre Callback-Klasse etwa so aussehen:
Dieser Ansatz bietet eine Reihe von Vorteilen, insbesondere wenn Sie eine Anwendung im CRUD-Stil schreiben (die einen Datenbankzugriff benötigt). Sie können beispielsweise Ihre gesamte Datenbanklogik in einer Basisklasse enthalten und vererbte untergeordnete Klassen für die Routenrückrufe verwenden. Sie können auch alle routengruppenbezogene Logik in separate Klassen einkapseln, z. eine Benutzerklasse haben, die alle / user-Routen behandelt, und so weiter.