Heim  >  Artikel  >  PHP-Framework  >  Eine sehr feinkörnige Methode zum Aufteilen von Laravel-Routing-Dateien (Übersetzung)

Eine sehr feinkörnige Methode zum Aufteilen von Laravel-Routing-Dateien (Übersetzung)

藏色散人
藏色散人nach vorne
2020-04-09 11:44:502954Durchsuche

Ich schätze, wir alle waren schon einmal in der Situation, dass wir eine sehr große Datei voller Routen haben. Ich will nicht lügen, das hat mich lange Zeit fast verrückt gemacht und ich musste einen Weg finden, es zu beheben. So habe ich letztendlich die Routing-Datei erstellt.

Empfohlenes Tutorial: „Laravel-Tutorial

Anfangs dachte ich daran, die Routengruppenmethode zum Empfangen von Dateien zu verwenden. So teilt Laravel die Route bei RouteServiceProvider auf.

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator&#39;s root namespace.
     *
     * @var string
     */
    protected $namespace = &#39;App\Http\Controllers&#39;;
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        //
        parent::boot();
    }
    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();
        $this->mapWebRoutes();
        //
    }
    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware(&#39;web&#39;)
             ->namespace($this->namespace)
             ->group(base_path(&#39;routes/web.php&#39;));
    }
    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix(&#39;api&#39;)
             ->middleware(&#39;api&#39;)
             ->namespace($this->namespace)
             ->group(base_path(&#39;routes/api.php&#39;));
    }
}

Ich habe die benutzerbezogenen Routen in eine Datei namens „users.php“ abstrahiert und „mapApiRoutes“ als „mapUsersRoutes“ kopiert und auf meine Datei „users.php“ verwiesen.

 /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();
        $this->mapWebRoutes();
        $this->mapUsersRoutes();
        //
    }
/**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapUsersRoutes()
    {
        Route::prefix(&#39;api&#39;)
             ->middleware(&#39;api&#39;)
             ->namespace($this->namespace)
             ->group(base_path(&#39;routes/users.php&#39;));
    }

Ich weiß, was Sie denken, offensichtlich ist dies nicht die beste Lösung, denn jedes Mal, wenn wir eine neue Datei erstellen müssen, müssen wir sie wie zuvor registrieren. Also musste ich diese ursprüngliche Idee verfeinern.

Ich hatte die Idee, die öffentlichen Teile der Anwendung in separate Routendateien aufzuteilen, und mir kam die Idee, dass keine unserer Routen über authentifizierte, Gast- und öffentliche Routen hinausgehen könnte.

Ich habe die Struktur des Routing-Ordners so optimiert, dass sie wie folgt aussieht:

├── routes   
│   ├── api    
│   │   ├── public
│   |   │   ├── users.php 
│   │   ├── auth
│   |   │   ├── users.php 
│   │   ├── guest
│   |   │   ├── users.php

Auf den ersten Blick denken Sie vielleicht: „Nun, es ändert sich nicht viel, wir müssen diese Dateien immer noch zuordnen.“ ". Allerdings können wir tatsächlich eine von PHP nativ bereitgestellte Funktion namens Glob nutzen, was eine sofort einsatzbereite Lösung ist, da wir nicht an die Lösung von Laravel gekoppelt sind.

glob akzeptiert einen regulären Ausdruck und kann Dateinamen unter Pfaden finden, die unserem regulären Ausdruck entsprechen. Unsere Routen sind also in bestimmten Ordnern organisiert und wir können nun alle Dateien in diesen Ordnern finden und sie in ihrer Middleware registrieren.

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator&#39;s root namespace.
     *
     * @var string
     */
    protected $namespace = &#39;App\Http\Controllers&#39;;
    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapAuthRoutes();
        $this->mapGuestRoutes();
        $this->mapPublicRoutes();
//        $this->mapWebRoutes();
        //
    }
    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware(&#39;web&#39;)
            ->namespace($this->namespace)
            ->group(base_path(&#39;routes/web.php&#39;));
    }
    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapAuthRoutes()
    {
        foreach (glob(base_path(&#39;routes/api/auth/*.php&#39;)) as $file) {
            Route::prefix(&#39;api&#39;)
                ->middleware([&#39;api&#39;, &#39;auth:api&#39;])
                ->group($file);
        }
    }
    protected function mapGuestRoutes()
    {
        foreach (glob(base_path(&#39;routes/api/guest/*.php&#39;)) as $file) {
            Route::prefix(&#39;api&#39;)
                ->middleware([&#39;api&#39;, &#39;guest:api&#39;])
                ->group($file);
        }
    }
    protected function mapPublicRoutes()
    {
        foreach (glob(base_path(&#39;routes/api/public/*.php&#39;)) as $file) {
            Route::prefix(&#39;api&#39;)
                ->middleware(&#39;api&#39;)
                ->group($file);
        }
    }
}

Wenn wir nun eine neue Datei erstellen, wird sie von foreach gefunden, da sie den Regex-Abgleich verwendet (die Datei befindet sich unter dem entsprechenden Pfad und hat eine PHP-Erweiterung, sodass sie mit unserem regulären Abgleich übereinstimmt). Es ist so sexy! Aber bitte warten Sie einen Moment.

Wie werden diese Dokumente registriert?

Wenn Sie den Lebenszyklus von Laravel studiert haben, wissen Sie, dass Dienstanbieter Teil des Lebenszyklus von Laravel-Anfragen sind und wir diese Funktion nutzen können, um unsere Routen dynamisch zu registrieren.

Das ist es! Ich hoffe es gefällt dir.

Originaladresse: https://dev.to/secmohammed/how-to-separa...

Übersetzungsadresse: https://learnku.com/laravel/t /42989

Das obige ist der detaillierte Inhalt vonEine sehr feinkörnige Methode zum Aufteilen von Laravel-Routing-Dateien (Übersetzung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen