Ich entwickle eine API mit Laravel für die Verwendung mit einer mobilen App und habe Probleme mit der Route Model Bindung auf verschachtelten Routen. Die App wird über eine eigenständige sqlite db verfügen, die Client-Reisen mit dem zentralen Server synchronisiert, wenn das Netzwerk verfügbar ist. Aus diesem Grund können die PKs in der App nicht für den Zugriff auf die Datensätze auf dem zentralen Server verwendet werden. Jeder Benutzer erhält einen eindeutigen Benutzernamen, der auf dem zentralen Server in einer Tabelle mit den folgenden Spalten gespeichert wird:
- Benutzer-ID
- Benutzername
Die Reisetabelle wird dann die folgenden Spalten haben:
- journey_id
- Benutzer-ID
- user_journey_id
Dabei ist user_journey_id
der PK des Reisedatensatzes auf dem Clientgerät.
Die Idee ist, dass die Clients dann auf die API zugreifen können mit:
Ссылка
die Reise vom zentralen Server abrufen.
Ich habe die folgenden Ressourcen eingerichtet:
%Vor%und haben die Routenmodellbindung erfolgreich für den Client wie folgt eingerichtet:
%Vor% Ich habe ein paar Probleme mit der Einrichtung der verschachtelten Modellbindung, da ich den Client username
in Kombination mit user_journey_id
benötige, um die korrekte Reise abzurufen. Gibt es eine Möglichkeit, dies mit dem Routenmodell zu tun?
Oder sollte dies nur in der Steuerung mit etwas wie gemacht werden:
So mache ich es derzeit, aber die Routenmodellbindung würde es sicherlich etwas einfacher machen.
Das Binden mehrerer URL-Parameter an Modelle ist in Laravel ebenso möglich wie das Verschachteln von Routenmodellen.
Eine Einschränkung besteht darin, dass Sie die Routen für diese speziellen Routen einzeln angeben müssen, anstatt Laravels Ressourcen-Controller zu verwenden, wie Sie es in Ihrem Beispiel verwendet haben.
Um eine Route mit mehr als einer Modellbindung zu registrieren, müssen Sie Folgendes tun:
Die Routendefinition:
%Vor%Die Bindungsdefinitionen:
%Vor%Sie werden dann feststellen, dass beide Modelle aufgelöst und der Aktionsmethode in der Controller-Klasse hinzugefügt werden:
%Vor%Der einzige wirkliche Nachteil dieses Ansatzes ist die Tatsache, dass Sie Routen manuell definieren müssen, anstatt die praktischen Ressourcen-Controller von Laravel zu verwenden. Natürlich könnten Sie einige Ihrer eigenen logischen implementieren, um diese Arten von Routen leichter zu definieren.
Ich denke, Ihr Ansatz ist nicht gut und Sie werden trotzdem einen separaten Controller verwenden, da Sie wahrscheinlich in Zukunft eine Auth-Schicht oder eine weitere Funktionalität hinzufügen müssen.
Wenn der Benutzername verwendet wird, ist die URL auch nicht gut, da es sich um eine Zeichenfolge mit Sonderzeichen handeln kann, die URL-codiert, dann dekodiert und daher fehleranfällig ist. Ich würde vorschlagen, die IDs zu verwenden, da es eine API ist.
Ressourcen rufen für jede angeforderte Aktion eine bestimmte Methode auf. Ich empfehle, diese Methoden zu verwenden.