Wie die Framework-Routen definiert sind
Routing ist die Technologie zur Lokalisierung von Serverressourcen, auf die zugegriffen werden soll
Route registrieren
Die grundlegendste Methode zur Routendefinition ist: `Route::rule('Route expression', 'Routing-Adresse', 'Anfragetyp')`
use think\facade\Route;
Nehmen Sie eine einzelne Anwendung als Beispiel:
// 注册路由到News控制器的read操作 Route::rule('new/:id','News/read');
Wenn wir Folgendes besuchen:
http://serverName/new/5
, wird es automatisch weitergeleitet an:
http://serverName/news/read/id/5
Und die ursprüngliche Zugangsadresse wird automatisch ungültig.
Sie können den Anforderungstyp in der Regelmethode angeben (wenn nicht angegeben, ist standardmäßig jeder Anforderungstyp gültig), zum Beispiel:
Route::rule('new/:id', 'News/update', 'POST');
Bei den Anforderungstypparametern wird die Groß-/Kleinschreibung nicht beachtet .
gibt an, dass die definierten Routing-Regeln nur unter POST-Anfragen gültig sind. Wenn Sie Routing-Regeln definieren möchten, die von GET- und POST-Anfragen unterstützt werden, können Sie Folgendes verwenden:
Route::rule('new/:id','News/read','GET|POST');
Wir empfehlen jedoch normalerweise die Verwendung der dem Anforderungstyp entsprechenden Verknüpfungsmethode, einschließlich:
类型 | 描述 | 快捷方法 |
---|---|---|
GET | GET请求 | get |
POST | POST请求 | post |
PUT | PUT请求 | put |
DELETE | DELETE请求 | delete |
PATCH | PATCH请求 | patch |
* | 任何请求类型 | any |
Die Verwendung der Shortcut-Registrierungsmethode ist:
Route::Shortcut-Methodenname ('Routing-Ausdruck', 'Routing-Adresse')
Verwendungsbeispiele sind wie folgt:
Route::get('new/<id>','News/read'); // 定义GET请求路由规则 Route::post('new/<id>','News/update'); // 定义POST请求路由规则 Route::put('new/:id','News/update'); // 定义PUT请求路由规则 Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则 Route::any('new/:id','News/read'); // 所有请求都支持的路由规则
Nach der Registrierung mehrerer Routing-Regeln durchläuft das System nacheinander die registrierten Routing-Regeln, die dem Anforderungstyp entsprechen. Sobald die richtige Routing-Regel vorliegt stimmt überein. Danach wird die endgültige Planungsmethode ausgeführt und nachfolgende Regeln werden nicht mehr erkannt.
Regelausdrücke
Regelausdrücke umfassen normalerweise statische Regeln und dynamische Regeln sowie eine Kombination beider Regeln. Beispielsweise sind alle folgenden Regeln gültig Regelausdrücke Formel:
Route::rule('/', 'index'); // 首页访问路由 Route::rule('my', 'Member/myinfo'); // 静态地址路由 Route::rule('blog/:id', 'Blog/read'); // 静态地址和动态地址结合 Route::rule('new/:year/:month/:day', 'News/read'); // 静态地址和动态地址结合 Route::rule(':user/:blog_id', 'Blog/read'); // 全动态地址
Die Definition des Regelausdrucks verwendet / als Parametertrennzeichen (unabhängig von der Einstellung Ihres PATH_INFO-Trennzeichens stellen Sie sicher, dass Sie / verwenden, um die URL-Parameter zu trennen, wenn Sie den Routing-Regelausdruck definieren, es sei denn, Sie verwenden eine Kombinationsvariable).
Jeder Parameter kann dynamische Variablen enthalten, zum Beispiel: Variablen oder <Variablen> stellen beide dynamische Variablen dar (die neue Version empfiehlt die Verwendung der zweiten Methode, die für gemischte Variablendefinitionen günstiger ist) und wird automatisch angezeigt gebunden an Die entsprechenden Parameter der Operationsmethode.
Ihr URL-Zugriffsbegrenzer PATH_INFO wird mit pathinfo_depr konfiguriert, aber unabhängig von der Konfiguration hat es keinen Einfluss auf die Routing-Begrenzerdefinition des Routing-Regelausdrucks.
Optionale Variable
unterstützt die optionale Definition von Routing-Parametern, zum Beispiel:
Route::get('blog/:year/[:month]','Blog/archive'); // 或者 Route::get('blog/<year>/<month?>','Blog/archive');
Die Variable ist in [ ] eingeschlossen. Zeigt an, dass dies der Fall ist Variable ist eine optionale Variable für den Routenabgleich.
Nachdem die Routing-Regeln oben definiert wurden, können die folgenden URL-Zugriffsadressen mit der richtigen Route abgeglichen werden:
http://serverName/index.php/blog/2015 http://serverName/index.php/blog/2015/12
Nach der Verwendung der optionalen Variablendefinition müssen zuvor zwei oder mehr Routing-Regeln definiert werden. Behandelte Situationen können in einer Routing-Regel zusammengefasst werden.
Optionale Parameter können nur am Ende von Routing-Regeln platziert werden. Wenn optionale Parameter in der Mitte verwendet werden, werden nachfolgende Variablen zu optionalen Parametern.
Genaue Übereinstimmung
Bei der Regelübereinstimmungserkennung wird standardmäßig nur die URL vom Anfang an abgeglichen, solange der Anfang der URL-Adresse enthält Wenn Sie die definierte Routing-Regel verwenden, ist der Abgleich erfolgreich Für eine vollständige Übereinstimmung können Sie das $-Symbol am Ende des Routing-Ausdrucks verwenden, zum Beispiel:
Route::get('new/:cate$', 'News/category');
Nach dieser Definition wird
http://serverName/index.php/new/info
erfolgreich übereinstimmen, aber
http://serverName/index.php/new/info/2
wird nicht erfolgreich übereinstimmen. Wenn
mit der Methode
Route::get('new/:cate', 'News/category');
definiert ist, können beide URL-Zugriffsmethoden erfolgreich abgeglichen werden.
Wenn Sie die URL global vollständig anpassen müssen, können Sie die
// 开启路由完全匹配 'route_complete_match' => true,
zusätzlichen Parameter in der Routing-Konfigurationsdatei
festlegen die Routing-Konfigurationsdatei Unterstützt zusätzliche eingehende Parameterpaare bei der Übertragung (zusätzliche Parameter beziehen sich auf Parameter, die nicht in der URL enthalten sind. Die implizite Übergabe erforderlicher Vorgänge kann manchmal eine gewisse Rolle beim Sicherheitsschutz spielen, worauf wir später noch eingehen werden). Beispiel:
Route::get('blog/:id','blog/read') ->append(['status' => 1, 'app_id' =>5]);
In der obigen Routing-Regeldefinition sind die Parameter status und app_id nicht in der URL vorhanden und sind implizite Wertübertragungen. Natürlich werden sie nicht unbedingt benötigt, können aber bei Bedarf verwendet werden . Für unterschiedliche Routen können unterschiedliche Zusatzparameter eingestellt werden.
Wenn es einen Konflikt zwischen den Variablen in der Append-Methode und den Routing-Regeln gibt, hat die in der Append-Methode übergebene Variable Vorrang.
RouteIdentifier
Wenn Sie schnell eine URL-Adresse basierend auf der Route generieren müssen, können Sie beim Definieren der Route den Generierungsbezeichner angeben (aber stellen Sie nur sicher).
Zum Beispiel kann
// 注册路由到News控制器的read操作 Route::rule('new/:id','News/read') ->name('new_read');
beim Generieren einer Routing-Adresse verwendet werden.
url('new_read', ['id' => 10]);
Wenn keine Routing-ID definiert ist, verwendet das System die Routing-Adresse als Standardmäßig die Routing-ID. Sie können die folgende Methode verwenden, um
url('News/read', ['id' => 10]);
zu generieren Erzwungenes Routing
Setzen Sie
'url_route_must' => true,
in der Routing-Konfigurationsdatei. Es können beispielsweise die folgenden Routing-Ausgaben übernommen/definiert werden.
Route::get('/', function () { return 'Hello,world!'; })