ルーティングパラメータについてどれくらい知っていますか?



ルーティング パラメータ

ルーティング グループ化とルール定義は、指定されたルーティング パラメータをサポートします。これらのパラメータは主に、ルート マッチングの検出と、その後の行動。

ルーティング ルールを定義する場合、ルーティング パラメーターを直接 (バッチで) 渡すことができますが、より明確に構成する方法を使用することをお勧めします。


##パラメータextdeny_exthttpsdomain##complete_matchルートが完全に一致するかどうかcompleteMatchmodelバインディング モデルmodelキャッシュリクエストキャッシュキャッシュ#Ajax検出#ajax# pjaxPjax 検出pjax
Route::get('new/:id', 'News/read')
    ->ext('html')
    ->https();
これらのルーティングパラメータいずれかのパラメータがチェックに合格しない限り、現在のルートは有効にならず、後続のルーティング ルールは検出され続けます。
説明メソッド名
URL サフィックス検出、複数のサフィックスの一致をサポートext
URL は禁止しますサフィックス検出と複数のサフィックスの一致のサポートdenyExt
https requesthttps かどうかを検出します。
ドメイン名の検出domain
#ajax
##jsonJSON 検出json
validateデータ検証用のバリデーター クラスをバインドしますvalidate
append追加パラメータを追加しますappend
middlewareルーティング ミドルウェアの登録middleware
filter リクエスト変数フィルタリングfilter
使用例:
ルーティング パラメータをバッチで設定する必要がある場合は、オプション方式を使用することもできます。

Route::get('new/:id', 'News/read')
    ->option([
        'ext'   => 'html',
        'https' => true
    ]);

URL suffix

URL サフィックスがグローバルに統一されている場合は、アプリケーション構成ファイル Route.php で url_html_suffix パラメーターを設定できます。現在アクセスされている URL アドレス内の URL サフィックスは、許可された擬似静的サフィックスであるため、サフィックス自体はパラメータ値として渡されません。

さまざまなパラメータ設定の違いは次のとおりです。


##設定値

説明


##false空の文字列#設定された疑似静的サフィックスのみを許可します #html|htm複数の疑似静的サフィックスを許可します
疑似静的アクセスを禁止する
任意の疑似静的サフィックスを許可します##html


// 定义GET请求路由规则 并设置URL后缀为html的时候有效
Route::get('new/:id', 'News/read')
    ->ext('html');

複数のサフィックスの一致をサポートします。例:

Route::get('new/:id', 'News/read')
    ->ext('shtml|html');

ext メソッドが値を渡さない場合は、サフィックス アクセスが許可されていないことを意味します。

アクセスを禁止する URL サフィックスを設定できます。例:

// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问
Route::get('new/:id', 'News/read')
    ->denyExt('jpg|png|gif');

denyExt メソッドが値を渡さない場合、アクセスにはそのサフィックスを使用する必要があることを意味します。

ドメイン名の検出

検出に完全なドメイン名またはサブドメイン名の使用をサポートします。例:

// 完整域名检测 只在news.thinkphp.cn访问时路由有效
Route::get('new/:id', 'News/read')
    ->domain('news.thinkphp.cn');
// 子域名检测
Route::get('new/:id', 'News/read')
    ->domain('news');

定義する必要がある場合サブドメイン名のバッチ ルーティング ルールの場合、ルーティング定義にドメイン メソッドを使用することをお勧めします。

HTTPS 検出

現在の HTTPS アクセスの検出をサポート

// 必须使用HTTPS访问
Route::get('new/:id', 'News/read')
    ->https();

AJAX/PJAX/JSON 検出

現在のリクエストが AJAX/PJAX/JSON であるかどうかを検出できます。

// 必须是JSON请求访问
Route::get('new/:id', 'News/read')
    ->json();

リクエスト変数の検出

ルーティング アドレスの一致に加えて、指定されたリクエスト変数が一致する場合にのみ、リクエスト変数が一致するかどうかをさらにチェックできます。このルートに一致するようにも一貫しています。

// 检查type变量
Route::post('new/:id', 'News/save')
    ->filter('type', 1);   
    
// 检查多个请求变量
Route::post('new/:id', 'News/save')
    ->filter([ 'type' => 1,'status'=> 1 ]);

追加パラメータの追加

ルートを定義するときに追加パラメータを暗黙的に追加できます。これらのパラメータは URL アドレスには表示されません。

Route::get('blog/:id', 'Blog/read')
    ->append(['app_id' => 1, 'status' => 1]);

リクエストをルーティングするとき、app_id と status の 2 つのパラメーターが同時に渡されます。

ルート バインディング モデル

ルーティング ルールとグループ化は、バインディング モデル データをサポートします。例:

Route::get('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User');

は、現在のルート セットを自動的にバインドします。現在のルーティング変数値のユーザー モデル データとしての id。

モデル バインディングで ID をクエリ条件として使用する場合、次のメソッドに簡略化することもできます。

Route::get('hello/:id', 'index/hello')
    ->model('\app\index\model\User');

デフォルトでは、モデル データがクエリされない場合、例外がスローされます。例外をスローしたくない場合は、

Route::rule('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User', false);

を使用してモデル データのクエリ条件を定義できます。例:

Route::rule('hello/:name/:id', 'index/hello')
    ->model('id&name', '\app\index\model\User');

は、クエリ ID と名前の値が現在のルーティング変数のモデル データと等しいことを示します。

クロージャを使用して、返される必要なモデル オブジェクトをカスタマイズすることもできます。

Route::rule('hello/:id', 'index/hello')
    ->model(function ($id) {
        $model = new \app\index\model\User;
        return $model->where('id', $id)->find();
    });

クロージャ関数のパラメータは、現在のリクエストの URL 変数情報です。

バインドされたモデルは、コントローラーのアーキテクチャ メソッドまたは操作メソッドに直接自動的に注入できます。詳細については、リクエストの章の依存関係の注入を参照してください。

リクエスト キャッシュ

現在のルーティング リクエストのキャッシュ処理をリクエストできます。例:

Route::get('new/:name$', 'News/read')
    ->cache(3600);

は、現在のルーティング リクエストに対して 3600 をキャッシュすることを意味します。ルーティング リクエストの秒数 詳細については、「リクエスト キャッシュ」セクションを参照してください。

ルーティングミドルウェア

ルーティングミドルウェアを使用できます。登録方法は次のとおりです:

Route::rule('hello/:name','hello')
	->middleware('Auth');

またはルーティンググループにミドルウェアを登録します。

Route::group('hello', function(){
	Route::rule('hello/:name','hello');
})->middleware('Auth');

追加のパラメーターをミドルウェアに渡す必要がある場合は、

Route::rule('hello/:name','hello')
	->middleware('Auth:admin');

を使用できます。定数定義を使用する場合は、2 番目のパラメーターでミドルウェア パラメーターを渡すことができます。

Route::rule('hello/:name','hello')
	->middleware(Auth::class, 'admin');

複数のミドルウェアを定義する必要がある場合は、配列メソッド

Route::rule('hello/:name','hello')
	->middleware([Auth::class, 'Check']);

を使用して、同じ追加パラメータ

Route::rule('hello/:name','hello')
	->middleware([Auth::class, 'Check'], 'admin');

を渡すことも、ミドルウェア パラメータを個別に指定することもできます。

Route::rule('hello/:name','hello')
	->middleware(['Auth:admin', 'Check:editor']);

動的パラメータ

追加のルーティング パラメータをカスタマイズする必要がある場合は、次の方法を使用できます:

Route::get('new/:name$', 'News/read')
    ->option('rule','admin');

または動的メソッドを使用します。

Route::get('new/:name$', 'News/read')
    ->rule('admin');

後続のルーティング アクションの後、ルートのルール パラメーターを呼び出して権限チェックを実行できます。