フレームワークルートの定義方法


ルーティングは、アクセスするサーバー リソースを見つけるテクノロジです。


# ルートの登録

最も基本的なルート定義方法は次のとおりです: `Route::rule('ルーティング式', 'ルーティングアドレス', 'リクエストタイプ')`

use think\facade\Route;

単一のアプリケーションを例に挙げます:

// 注册路由到News控制器的read操作
Route::rule('new/:id','News/read');

http://serverName/new/5

にアクセスすると、自動的に

http://serverName/news/read/id/5

にルーティングされ、元のアクセス アドレスが自動的に設定されます。無効になります。

ルール メソッドでリクエスト タイプを指定できます (指定しない場合は、デフォルトで任意のリクエスト タイプが有効になります)。例:

Route::rule('new/:id', 'News/update', 'POST');

リクエスト タイプのパラメータは大文字と小文字が区別されません。 。

は、定義されたルーティング ルールが POST リクエストでのみ有効であることを示します。 GET および POST リクエストでサポートされるルーティング ルールを定義する場合は、

Route::rule('new/:id','News/read','GET|POST');

を使用できます。ただし、通常は、次のようなリクエスト タイプに対応するショートカット メソッドを使用することをお勧めします。


##タイプ説明ショートカットメソッドGETGET リクエストgetPOSTPOST リクエストpostPUTPUT リクエストputDELETEDELETE リクエスト deletePATCHPATCH requestpatch任意のリクエストタイプ任意


ショートカット登録メソッドの使用法は次のとおりです:

Route::shortcut メソッド名 ('ルーティング式', 'ルーティング アドレス')

使用例は次のとおりです:

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'); // 所有请求都支持的路由规则

複数のルーティング ルールを登録した後、システムはリクエスト タイプに一致する登録済みのルーティング ルールを順に探索し、正しいルーティング ルールが一致すると、最終的なスケジューリング メソッドが実行されます。 、後続のルールが実行されるため、これ以上のテストは必要ありません。

ルール式

ルール式には、通常、静的ルールと動的ルール、および 2 つのルールの組み合わせが含まれます。たとえば、次はすべてです。有効なルール式 式:

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'); // 全动态地址

正規表現の定義では、パラメータ区切り文字として / が使用されます (PATH_INFO 区切り文字の設定に関係なく、ルーティング ルール式を定義して URL を区切る場合は、必ず / を使用してください)ただし、変数を組み合わせて使用​​する場合を除きます)。

各パラメーターには動的変数を含めることができます。たとえば、変数または <変数> は両方とも動的変数を表し (新しいバージョンでは、混合変数定義に適した 2 番目の方法の使用を推奨しています)、自動的に操作メソッドの対応するパラメータにバインドされます。

URL アクセスの PATH_INFO 区切り文字は pathinfo_depr を使用して構成されていますが、どのように構成しても、ルーティング ルール式のルーティング区切り文字の定義には影響しません。

オプションの変数

ルーティング パラメータのオプションの定義をサポートします。例:

Route::get('blog/:year/[:month]','Blog/archive');
// 或者
Route::get('blog/<year>/<month?>','Blog/archive');

変数が [ ] で囲まれた後この変数は、ルート マッチングのオプションの変数です。

上記のルーティング ルールを定義すると、次の URL アクセス アドレスが正しいルートと一致するようになります:

http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12

オプションの変数定義を使用した後は、前に 2 つ以上のルーティング ルールを定義する必要があります。処理された状況をルーティング ルールに組み合わせることができます。

オプションのパラメータはルーティング ルールの最後にのみ配置できます。オプションのパラメータが途中で使用された場合、後続の変数はオプションのパラメータになります。

完全一致

ルールの一致が検出された場合、デフォルトでは URL の先頭からのみ一致します。URL アドレスの先頭に限ります。定義されたルーティング ルールが含まれている場合、一致は成功します。URL を正確に一致させるには、ルーティング式の最後に $ 記号を使用できます。例:

Route::get('new/:cate$', 'News/category');

この定義の後に、

http://serverName/index.php/new/info

は正常に一致しますが、

http://serverName/index.php/new/info/2

は正常に一致しません。

Route::get('new/:cate', 'News/category');

の方法で定義すると、両方の URL アクセス方法を正常に照合できます。

URL をグローバルに完全に一致させる必要がある場合は、ルーティング構成ファイルで

// 开启路由完全匹配
'route_complete_match'   => true,

追加パラメータを設定できます。

ルーティング ジャンプ 追加の受信パラメーター ペアをサポートする場合があります (追加パラメーターとは、URL にないパラメーターを指します。必要な操作を暗黙的に渡すことで、セキュリティ保護において特定の役割を果たす場合があります。これについては後で説明します)。例:

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

上記のルーティング ルール定義では、status パラメーターと app_id パラメーターは URL に存在せず、暗黙的な値の転送です。もちろん、これらは必ずしも必要というわけではありませんが、必要な場合に使用できます。 。ルートごとに異なる追加パラメータを設定できます。

append メソッドの変数とルーティング ルールの間に矛盾がある場合は、append メソッドで渡された変数が優先されます。

ルート識別

ルートに基づいてURLアドレスを迅速に生成する必要がある場合は、ルートを定義するときに生成識別を指定できます。 (ただし、必ず確認してください)。


// 注册路由到News控制器的read操作
Route::rule('new/:id','News/read')
    ->name('new_read');

ルーティング アドレスを生成するときに使用できます

url('new_read', ['id' => 10]);

ルーティング識別子を定義しない場合、システムはルーティング アドレスを使用します。たとえば、次のメソッドを使用して、

url('News/read', ['id' => 10]);

強制ルーティング
Set

'url_route_must'		=>  true,

ホームページのルーティング ルールを生成できます。ルーティング設定ファイルは、次のように採用/定義できます。 Web サイトのホームページのルーティング出力 Hello, world!

Route::get('/', function () {
    return 'Hello,world!';
})