Wie viel wissen Sie über Routing-Parameter?
Routing-Parameter
Routing-Gruppierung und Regeldefinitionen unterstützen angegebene Routing-Parameter, die hauptsächlich die Routenübereinstimmungserkennung und -nachfolge vervollständigen Verhalten.
Routing-Parameter können beim Definieren von Routing-Regeln direkt (in Stapeln) übergeben werden. Es wird empfohlen, die Methode zu verwenden, um die Konfiguration übersichtlicher zu gestalten.
参数 | 说明 | 方法名 |
---|---|---|
ext | URL后缀检测,支持匹配多个后缀 | ext |
deny_ext | URL禁止后缀检测,支持匹配多个后缀 | denyExt |
https | 检测是否https请求 | https |
domain | 域名检测 | domain |
complete_match | 是否完整匹配路由 | completeMatch |
model | 绑定模型 | model |
cache | 请求缓存 | cache |
ajax | Ajax检测 | ajax |
pjax | Pjax检测 | pjax |
json | JSON检测 | json |
validate | 绑定验证器类进行数据验证 | validate |
append | 追加额外的参数 | append |
middleware | 注册路由中间件 | middleware |
filter | 请求变量过滤 | filter |
Anwendungsbeispiel:
Route::get('new/:id', 'News/read') ->ext('html') ->https();
Diese Routing-Parameter können gemischt werden, solange jeder Parameter vorhanden ist aktiviert Wenn dies nicht der Fall ist, wird die aktuelle Route nicht wirksam und nachfolgende Routing-Regeln werden weiterhin erkannt.
Wenn Sie Routing-Parameter stapelweise festlegen müssen, können Sie auch die Optionsmethode verwenden.
Route::get('new/:id', 'News/read') ->option([ 'ext' => 'html', 'https' => true ]);
URL-Suffix
Wenn das URL-Suffix global einheitlich ist, können Sie den Parameter url_html_suffix in der Anwendungskonfigurationsdatei route.php festlegen die aktuell aufgerufene URL. Das URL-Suffix in der Adresse ist ein zulässiges pseudostatisches Suffix, sodass das Suffix selbst nicht als Parameterwert übergeben wird.
Die Unterschiede zwischen verschiedenen Parametereinstellungen sind wie folgt:
配置值 | 描述 |
---|---|
false | 禁止伪静态访问 |
空字符串 | 允许任意伪静态后缀 |
html | 只允许设置的伪静态后缀 |
html|htm | 允许多个伪静态后缀 |
// 定义GET请求路由规则 并设置URL后缀为html的时候有效 Route::get('new/:id', 'News/read') ->ext('html');
unterstützt den Abgleich mehrerer Suffixe, zum Beispiel:
Route::get('new/:id', 'News/read') ->ext('shtml|html');
Wenn die ext-Methode keinen Wert übergibt, bedeutet dies, dass kein Suffixzugriff zulässig ist.
Sie können ein URL-Suffix festlegen, das den Zugriff verbietet, zum Beispiel:
// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问 Route::get('new/:id', 'News/read') ->denyExt('jpg|png|gif');
Wenn die denyExt-Methode keinen Wert übergibt, bedeutet dies, dass das Suffix für den Zugriff verwendet werden muss.
Domänennamenerkennung
Unterstützt die Verwendung vollständiger Domänennamen oder Subdomänennamen zur Erkennung, zum Beispiel:
// 完整域名检测 只在news.thinkphp.cn访问时路由有效 Route::get('new/:id', 'News/read') ->domain('news.thinkphp.cn'); // 子域名检测 Route::get('new/:id', 'News/read') ->domain('news');
Wenn Sie müssen Batches für Subdomänennamen definieren. Für Routing-Regeln wird empfohlen, die Domänenmethode zur Routing-Definition zu verwenden.
HTTPS-Erkennung
Unterstützung der Erkennung des aktuellen HTTPS-Zugriffs
// 必须使用HTTPS访问 Route::get('new/:id', 'News/read') ->https();
AJAX/PJAX/JSON-Erkennung
kann erkennen, ob die aktuelle Anfrage AJAX/PJAX/JSON ist.
// 必须是JSON请求访问 Route::get('new/:id', 'News/read') ->json();
Erkennung von Anforderungsvariablen
Zusätzlich zum Abgleich der Routing-Adresse können Sie zusätzlich prüfen, ob die Anforderungsvariablen nur dann übereinstimmen, wenn die angegebenen Anforderungsvariablen übereinstimmen auch passend zu dieser Route.
// 检查type变量 Route::post('new/:id', 'News/save') ->filter('type', 1); // 检查多个请求变量 Route::post('new/:id', 'News/save') ->filter([ 'type' => 1,'status'=> 1 ]);
Zusätzliche Parameter anhängen
Sie können beim Definieren einer Route implizit zusätzliche Parameter anhängen. Diese Parameter werden dann nicht in der URL-Adresse angezeigt.
Route::get('blog/:id', 'Blog/read') ->append(['app_id' => 1, 'status' => 1]);
übergibt beim Weiterleiten der Anfrage gleichzeitig die Parameter app_id und status.
Routenbindungsmodell
Routingregeln und -gruppen unterstützen die Bindung von Modelldaten, zum Beispiel:
Route::get('hello/:id', 'index/hello') ->model('id', '\app\index\model\User');
bindet automatisch den aktuellen Routensatz id als Benutzermodelldaten des aktuellen Routing-Variablenwerts.
Wenn Ihre Modellbindung die ID als Abfragebedingung verwendet, kann sie auch auf die folgende Methode vereinfacht werden
Route::get('hello/:id', 'index/hello') ->model('\app\index\model\User');
Wenn die Modelldaten nicht abgefragt werden, wird standardmäßig eine Ausnahme ausgelöst. Wenn Sie keine Ausnahme auslösen möchten, können Sie mit
Route::rule('hello/:id', 'index/hello') ->model('id', '\app\index\model\User', false);
Abfragebedingungen für Modelldaten definieren, zum Beispiel:
Route::rule('hello/:name/:id', 'index/hello') ->model('id&name', '\app\index\model\User');
gibt an, dass die Abfrage-ID- und Namenswerte mit den Modelldaten der aktuellen Routing-Variablen übereinstimmen.
Sie können Abschlüsse auch verwenden, um die erforderlichen zurückgegebenen Modellobjekte anzupassen
Route::rule('hello/:id', 'index/hello') ->model(function ($id) { $model = new \app\index\model\User; return $model->where('id', $id)->find(); });
Die Parameter der Abschlussfunktion sind die URL-Variableninformationen der aktuellen Anfrage.
Das gebundene Modell kann automatisch direkt in die Architekturmethode oder Betriebsmethode des Controllers eingefügt werden. Weitere Informationen finden Sie im Abschnitt zur Anforderungsinjektion.
Caching anfordern
kann Caching für die aktuelle Routing-Anfrage anfordern, zum Beispiel:
Route::get('new/:name$', 'News/read') ->cache(3600);
bedeutet, dass die aktuelle Routing-Anfrage 3600 Sekunden lang zwischengespeichert wird Weitere Informationen finden Sie im Abschnitt „Anforderungs-Caching“.
Routing-Middleware
Sie können Routing-Middleware wie folgt verwenden:
Route::rule('hello/:name','hello') ->middleware('Auth');
oder registrieren Sie die Middleware für die Routing-Gruppe
Route::group('hello', function(){ Route::rule('hello/:name','hello'); })->middleware('Auth');
Wenn Sie zusätzliche Parameter an die Middleware übergeben müssen, können Sie
Route::rule('hello/:name','hello') ->middleware('Auth:admin');
Wenn Sie eine Konstantendefinition verwenden, können Sie die Middleware-Parameter im zweiten Parameter übergeben.
Route::rule('hello/:name','hello') ->middleware(Auth::class, 'admin');
Wenn Sie mehrere Middlewares definieren müssen, verwenden Sie die Array-Methode
Route::rule('hello/:name','hello') ->middleware([Auth::class, 'Check']);
, um denselben zusätzlichen Parameter
Route::rule('hello/:name','hello') ->middleware([Auth::class, 'Check'], 'admin');
zu übergeben, oder geben Sie die Middleware-Parameter einzeln an.
Route::rule('hello/:name','hello') ->middleware(['Auth:admin', 'Check:editor']);
Dynamische Parameter
Wenn Sie einige zusätzliche Routing-Parameter anpassen müssen, können Sie die folgende Methode verwenden:
Route::get('new/:name$', 'News/read') ->option('rule','admin');
oder die dynamische Methode verwenden
Route::get('new/:name$', 'News/read') ->rule('admin');
Nach nachfolgenden Routing-Aktionen können Sie den Regelparameter der Route aufrufen, um eine Berechtigungsprüfung durchzuführen.