Definiere CakePHP Route zum Aufruf eines bestimmten Controllers, wenn die angegebene Aktion nicht existiert

8
  

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

gehen
  

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

gehen

Meine aktuelle routes.php sieht so aus

%Vor%     
Aman Rawat 19.05.2017, 07:46
quelle

2 Antworten

3

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() .

%Vor%

Dann fügen Sie in Ihrem App\Application hinzu, siehe auch Anhängen von Middlewares

%Vor%

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.

    
Cholthi Paul Ttiopic 21.05.2017 08:20
quelle
1

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

zurückgreifen %Vor%     
Cholthi Paul Ttiopic 20.05.2017 09:27
quelle

Tags und Links