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.


参数说明方法名
extURL后缀检测,支持匹配多个后缀ext
deny_extURL禁止后缀检测,支持匹配多个后缀denyExt
https检测是否https请求https
domain域名检测domain
complete_match是否完整匹配路由completeMatch
model绑定模型model
cache请求缓存cache
ajaxAjax检测ajax
pjaxPjax检测pjax
jsonJSON检测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.