Organisation von Routen in Laravel

Hallo habr Kürzlich habe ich einer Überprüfung einer Website zugestimmt, die auf freiberuflicher Basis bestellt wurde. Ich hatte erwartet, Controller zu sehen, die alles tun und mehr als 200 Zeilen (und andere Manifestationen von schlechtem Code) belegen, aber alles war ziemlich anständig. Die Validierung lag nicht im Controller, was durchaus üblich ist. Manchmal gab es natürlich einige PSR-2-Inkonsistenzen, aber alles sah gut aus, bis ich in die Datei mit den Routen schaute. Es besetzte mehrere Bildschirme und hatte Kommentare zu Routengruppen. Ich kontaktierte den Entwickler und er sagte, dass alles ein bisschen "gewachsen" sei und stimmte zu, es zu beheben. In der nächsten Version sah ich, dass er mehrere Klassen mit statischen Methoden erstellte, in die er den Code übertrug und diese wie üblich mit Autorisierung aufrief. Dann erinnerte ich mich, dass ich dies bereits erlebt hatte und auf ein solches Argument gestoßen war: "Die Dokumentation sagt nichts darüber aus, wie man Routen zu verschiedenen Dateien nimmt." Nur ein paar Minuten später fand ich einen Artikel und schickte ihn an den Entwickler. Nach einer halben Stunde erhielt ich die Routen in normaler Form und entschied, dass dieser Artikel für viele Anfänger nützlich sein würde. So wurde diese freie Übersetzung geboren.

Wenn Sie die RouteServiceProvider-Datei noch nie bearbeitet haben, heißen Sie cat willkommen.

Wenn Sie mit einem kleinen Projekt arbeiten und nur ein paar Routen haben, gibt es keine Probleme. Wenn die Anzahl der Routen jedoch zu groß ist, wird das Arbeiten in einer Datei schwierig, insbesondere wenn Sie Seiten für verschiedene Benutzer, Administratoren usw. haben.

Zunächst erstellt Laravel 4 Dateien:

  • api.php
  • console.php
  • channels.php
  • web.php

Angenommen, Sie möchten für jeden Benutzertyp ein Projekt mit zehn Seiten erstellen:

  • Administrator [Website-Einstellungen, Statistiken usw. ]
  • Benutzer [Registrierung, Login, Profilverwaltung usw. ]
  • Gäste [Blog, Kontakte usw. ]

Erstellen Sie zwei Verzeichnisse innerhalb von Routen :

  • web - Hier sind alle mit der Weboberfläche verbundenen Routen aufgeführt.
  • API - Hier sind alle API-bezogenen Routen


Wir verschieben die Datei "api.php" von " routes" in das Verzeichnis " routes / api" und " web.php" in " routes / web" und belassen die verbleibenden Dateien "console.php" und " channels.php" in "routes".

Erstellen Sie die Datei admin.php in routes / web . Diese Datei enthält alle mit dem Administrator verknüpften Webrouten und erstellt dort die Datei user.php für die mit dem Benutzer verknüpften Routen.



app / Providers / RouteServiceProvider.php - Diese Datei ist für das Herunterladen aller Routen unserer Anwendung verantwortlich. Die map () -Methode ruft die Methoden mapApiRoutes () und mapWebRoutes () auf, um die bereits verschobenen Dateien web.php und api.php zu laden. Korrigieren Sie also die Pfade zu den Routendateien .

protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web/web.php')); } 

 protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api/api.php')); } 

Erstellen Sie nun neue Methoden für routen / web / admin.php und routen / web / user.php in RouteServiceProvider.php

 protected function mapAdminWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('admin') ->group(base_path('routes/web/admin.php')); } 

 protected function mapUserWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('user') ->group(base_path('routes/web/user.php')); } 

Bitte beachten Sie, dass in diesem Code Namespace, Middleware, Präfix usw. für Pfade hinzugefügt werden können.

Als nächstes rufen Sie sie einfach von map () auf:

 public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminWebRoutes(); $this->mapUserWebRoutes(); } 

Letzter Schritt:

Öffne routes / web / user.php und füge eine Testroute hinzu:

 Route::get('/test', function () { return response(' ', 200); }); 

Gehen Sie zu site.local / user / test, Sie sollten den Text "Test Route" sehen.

Source: https://habr.com/ru/post/de474788/


All Articles