Routing-Paket-Technologie



Routengruppierung

Verwenden Sie die Gruppenmethode der Route-Klasse, um sich zu registrieren und einige allgemeine Routeneinstellungsparameter für das Gruppenrouting zu definieren , wie zum Beispiel:

Route::group('blog', function () {
    Route::rule(':id', 'blog/read');
    Route::rule(':name', 'blog/read');
})->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);

Gruppen-Routing unterstützt alle Routing-Parametereinstellungen. Informationen zur spezifischen Parameterverwendung finden Sie im Kapitel Routing-Parameter.

Wenn es nur zum Festlegen einiger allgemeiner Routing-Parameter (auch virtuelle Gruppen genannt) für einige Routing-Regeln verwendet wird, können Sie auch Folgendes verwenden:

Route::group(function () {
    Route::rule('blog/:id', 'blog/read');
    Route::rule('blog/:name', 'blog/read');
})->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);

Routing-Gruppen unterstützen die Verschachtelung, zum Beispiel:

Route::group(function () {
    Route::group('blog', function () {
        Route::rule(':id', 'blog/read');
        Route::rule(':name', 'blog/read');
    });
})->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);

Wenn verschachtelte Gruppen verwendet werden, erbt die untergeordnete Gruppe die Parameter und Variablenregeln der übergeordneten Gruppe und die in den endgültigen Routing-Regeln definierten Parameter und Variablenregeln haben Vorrang.

kann die Präfixmethode verwenden, um die Definition derselben Routing-Adresse zu vereinfachen. Beispielsweise kann die folgende Definition

Route::group('blog', function () {
    Route::get(':id', 'blog/read');
    Route::post(':id', 'blog/update');
    Route::delete(':id', 'blog/delete');
})->ext('html')->pattern(['id' => '\d+']);

zu

Route::group('blog', function () {
    Route::get(':id', 'read');
    Route::post(':id', 'update');
    Route::delete(':id', 'delete');
})->prefix('blog/')->ext('html')->pattern(['id' => '\d+']);
vereinfacht werden

Genaue Routenübereinstimmung

Wenn Sie möchten, dass alle Routen einer bestimmten Gruppe genau übereinstimmen, können Sie

Route::group('blog', function () {
    Route::get(':id', 'read');
    Route::post(':id', 'update');
    Route::delete(':id', 'delete');
})->completeMatch()->prefix('blog/')->ext('html')->pattern(['id' => '\d+']);
<🎜 verwenden >

Verzögerte Routenauflösung

Unterstützt verzögerte Routenauflösung, was bedeutet, dass die von Ihnen definierten Routing-Regeln (hauptsächlich Gruppen-Routing und Domänennamen-Routing-Regeln) beim Laden der Routing-Definition nicht geladen werden Es gibt keine tatsächliche Registrierung, sondern die tatsächliche Registrierung und Auflösung erfolgt erst, wenn die Routing-Gruppe oder der Domänenname übereinstimmt, was die Leistung der Routing-Registrierung und -Auflösung erheblich verbessert.

Die verzögerte Routenanalyse ist standardmäßig deaktiviert. Sie können sie in der Routing-Konfigurationsdatei festlegen:

// 开启路由延迟解析
'url_lazy_route'         => true,

Wenn Sie nach der Aktivierung der verzögerten Routenanalyse eine Routenentschlüsselungs-URL generieren müssen, können Sie dies tun Sie müssen den Befehlszeilenbefehl

php think optimize:route

verwenden, um die Routing-Cache-Auflösung zu generieren.

Das Definieren von Routen über Routinggruppen oder das Routing von Domänennamen kann von der verzögerten Auflösung profitieren.

Sobald die verzögerte Auflösung des Routings aktiviert ist, werden die definierten Domänennamen-Routen und Gruppenrouten verzögert und aufgelöst. Das heißt, Routing-Regeln werden erst registriert, nachdem der Domänenname oder die Gruppe tatsächlich abgeglichen wurde Vermeiden Sie unnötigen Registrierungs- und Analyseaufwand.

Zusammengeführte Analyse von Routing-Regeln

Routing-Regeln unter derselben Routing-Gruppe unterstützen die zusammengeführte Analyse, ohne alle Routing-Regeln unter der Routing-Gruppe zu durchlaufen, was die Leistung der Routenauflösung erheblich verbessern kann .

Die Verwendung der separaten Aktivierung der Zusammenführungsregelanalyse für eine bestimmte Gruppe ist wie folgt:

Route::group('user', function () {
    Route::rule('hello/:name','hello');
    Route::rule('think/:name','think');
})->mergeRuleRegex();

Auf diese Weise müssen alle Routingregeln unter der Gruppe nur einmal abgeglichen und überprüft werden, egal wie Viele sind definiert (eigentlich nur Rendezvous- und Check-Routing-Regeln, die dem aktuellen Anforderungstyp entsprechen).

Die mergeRuleRegex-Methode kann nur für Routinggruppen oder Domänennamen-Routing verwendet werden (Domänennamen-Routing ist eigentlich eine spezielle Gruppe).

Oder globale Zusammenführungsregeln in der Routing-Konfigurationsdatei festlegen und aktivieren (gültig für alle Gruppen)

// 开启路由合并解析
'route_rule_merge'	=> true,

Zusätzliche Parameter übergeben

Ja, gleichmäßig geben Das Gruppenrouting übergibt zusätzliche Parameter

Route::group('blog', [
    ':id'   => 'Blog/read',
    ':name' => 'Blog/read',
])->ext('html')
->pattern(['id' => '\d+'])
->append(['group_id' => 1]);

Das obige Gruppenrouting übergibt einheitlich den Parameter „group_id“, und der Wert dieses Parameters kann über die param-Methode der Request-Klasse abgerufen werden.