Verwenden von CakePHP v3.3.16
Ich möchte eine Fallback-Route so schreiben, dass, wenn die URL mit keiner Aktion verbunden ist, sie zu diesem Fallback gehen soll.
Routen für eine SEO-freundliche URL wie diese erstellt
%Vor%Aber es beinhaltet auch alle Controller-Aktionen, wenn ich versuche, einen Controller aufzurufen ex: cart / index geht es zu Website / marks / index / index
Wenn ich es ausschließen muss, muss ich eine Route wie diese erstellen /
%Vor%Und so weiter auf den anderen Controller zuzugreifen.
Beispiel: Ich habe einen Controller CartController Aktion addCart
Fall 1
Wenn ich auf die URL my_project/cart/addCart/
zugreife, sollte es zur Cart Controller Action
Fall 2
Wenn ich auf die URL my_project/abc/xyz/
zugreife und es keinen Controller namens abc gibt, sollte dieser zu BrandsController action index
Meine aktuelle routes.php sieht so aus
%Vor%Ihre Änderungen machen meine erste Antwort komplett ungültig, also habe ich beschlossen, einfach eine andere Antwort zu posten.
Was Sie erreichen möchten, kann vom Router nicht ausgeführt werden, da der Router nicht feststellen kann, ob der Controller / die Aktion für eine bestimmte Route existiert. Dies liegt daran, dass der Router nur mit URL-Vorlagen arbeitet und die Aufgabe, Controller im Anfrage-Stack zu laden, delegiert.
Sie können diese Funktion jedoch emulieren, indem Sie eine Middleware verwenden
Überprüfen Sie, ob das Anforderungsattribut params
festgelegt ist und validieren Sie sie dann entsprechend und ändern Sie sie in Ihren Fallback-Controller, wenn der Zielcontroller nicht existiert.
Stellen Sie nur sicher, dass Sie das RoutingMiddleware
execute vor Ihrer Middleware platzieren, sonst werden Sie keine Parameter überprüfen müssen, da die Routen nicht geparst worden wären.
Middlewares implementieren eine Methode __invoke()
.
Dann fügen Sie in Ihrem App\Application
hinzu, siehe auch Anhängen von Middlewares
Bitte bereue, den Code zu bereinigen, da ich ihn nicht unter der richtigen Dev-Umgebung getestet habe.
Nachgedacht: Wenn Sie eine Fehlerseite für alle nicht gefundenen Ressourcen erstellen wollten, dann brauchen Sie das nicht, stattdessen würden Sie einfach die Fehlervorlage in Template/Error/error404.ctp
anpassen.
Wenn ich es entfernen muss, muss ich eine Route wie folgt erstellen / Und so weiter zum anderen Controller, um auf zuzugreifen.
Es ist nicht notwendig, jeden Controller / Namen im Muster anzugeben, stattdessen können Sie zuerst alle angegebenen Routen erstellen und dann die folgende Route darunter platzieren, um alle nicht übereinstimmenden Routen abzufangen.
%Vor%Und vielleicht noch eins ohne Präfix
%Vor% Und da Sie erwähnt haben, dass Sie 3.3.*
cake version verwenden, können Ihre Routen geschrieben werden, indem Sie auf routes scoping