ThinkPHP5.2 のルーティング部分は、他のコンポーネントと同様に、主に次の点を含めて合理化および最適化されています。
ルートの復帰をキャンセルする定義配列形式
ルート キャッシュの生成には適さないため、ルート定義ファイルはルートを定義するために配列を返すメソッドをキャンセルし、ルーティング メソッドを使用してルートを登録する必要があります。ルート。
例:
return [ 'hello/:name' => 'index/hello', ];
を次のように変更する必要があります:
Route::get('hello/:name', 'index/hello');
複数のアプリケーションのルーティング定義ファイルの場所
シングルアプリケーションモードでは、ルート定義ファイルは従来通りルートディレクトリ配下にあります プロジェクトで複数のアプリケーションを使用する場合、各アプリケーションのルート定義とマッチングは独立しており、モジュールの概念はありません ルート定義ファイルの場所これは、route/application サブディレクトリの下にある必要があります。例:
route/index/route.php // index应用的路由定义文件 route/index/web.php // index应用的第二个路由定义文件 route/admin/route.php // admin应用的路由定义文件
デフォルトの URL ルールは
http://域名/入口文件(或者应用名)/控制器名/操作名
になります。アプリケーションのルーティング ルールは、実際には定義されたエントリ ファイルです。 (またはアプリケーション名の後の URL の一部)、アプリケーションを除きます。
自動マルチアプリケーション
最新バージョン 5.2 では、同じエントリ ファイル内の複数の異なるアプリケーションへのアクセスをサポートできます (以前は、対応するアプリケーションごとに 1 つ追加する必要がありました)エントリーファイル)。
たとえば、index.php エントリ ファイルで次のように使用します。
(new App())->autoMulti()->run()->send();
エントリ ファイルを作成せずに、URL を介して複数のアプリケーションに自動的にアクセスできます
http://serverName/index.php/admin
デフォルトのアプリケーションがインデックスではない場合 (デフォルトはエントリ ファイル名です)、name メソッドを使用してデフォルトのアプリケーションを指定できます。
(new App())->autoMulti() ->name('admin') ->run() ->send();
アプリケーション名のエイリアス マッピングをサポートします。例:
(new App())->autoMulti([ 'think' => 'admin', // 把admin应用映射为think ])->run()->send();
アプリケーションをカスタマイズする必要がある場合は、
(new App())->autoMulti([ 'admin' => function($app) { $app->debug(true)->useClassSuffix(); } ])->run()->send();
を使用してエイリアス ルーティングをキャンセルできます
使用シナリオの制限とパフォーマンスのオーバーヘッドの問題により、元のエイリアス ルーティング機能はキャンセルされ、代わりにリソース ルーティングまたは別のルートを使用することをお勧めします。
ショートカットルーティングのキャンセル
利用シーンが限定的で仕様を満たしていないため、オリジナルコントローラーのショートカットルーティング機能はキャンセルされました。
空のコントローラと空の操作をキャンセル
元の空のコントローラと空の操作機能がキャンセルされました。代わりに MISS ルーティング機能を使用してください。別のルーティングをサポートできます。グループ化により、MISS ルーティングが設定されます。同時に、empty_controller 設定は破棄されます。
コントローラの自動検索のキャンセル
パフォーマンス上の理由により、マルチレベル コントローラのルーティングの自動検索機能がキャンセルされました。ルートを明確に指定してください。ルーティング ルール定義でルーティングされる マルチレベル コントローラー。
ルーティング関数は独立して設計されています
ルーティング関数は固定的に実行されなくなり、AppInit イベントの応答モニターとして設計されており、構成可能ですプロジェクトのイベント定義内 システムのデフォルト 定義と構成は次のとおりです:
return [ 'bind' => [ ], 'listen' => [ 'AppInit' => [ 'think\listener\LoadLangPack', 'think\listener\RouteCheck', ], 'AppBegin' => [ 'think\listener\CheckRequestCache', ], 'ActionBegin' => [], 'AppEnd' => [], 'LogLevel' => [], 'LogWrite' => [], 'ResponseSend' => [], 'ResponseEnd' => [], ], 'subscribe' => [ ], ];
think\listener\RouteCheck クラスは AppInit イベントで実行されます。ルーティング機能をまったく使用しない場合は、設定ファイルの定義をキャンセルすることができ、システムはデフォルトの URL ディスパッチ (つまり、コントローラー/アクション) を実行します。
登録キャンセルメソッドのオプションおよびパターンパラメータ
ルート登録メソッドのキャンセル (rule/get/post/put/delete/patch/miss/group および他のメソッド) オプションとパターンのパラメーターはすべてメソッド呼び出し形式に変更されます。たとえば、元の
Route::get('hello/:name', 'index/hello', [ 'ext' => 'html'], [ 'name' => '\w+']);
を
Route::get('hello/:name', 'index/hello') ->ext('html') ->pattern([ 'name' => '\w+']);
に変更する必要があります。ルーティング グループ定義は廃止されました。配列をサポートします
グループの入れ子機能に適さないため、ルーティング グループ定義は配列をサポートしなくなり、クロージャを使用してのみ定義できます。例:
Route::group('blog', [ ':id' => 'Blog/read', ':name' => 'Blog/read', ])->ext('html')->pattern(['id' => '\d+']);
は次のようになります。必要に応じて
Route::group('blog', function() { Route::get(':id', 'Blog/read'); Route::get(':name', 'Blog/read'); })->ext('html')->pattern(['id' => '\d+']);
に変更します。 仮想ルーティング グループを登録するには、最初のパラメータでクロージャを直接使用できます。
Route::group(function() { Route::get('blog/:id', 'Blog/read'); Route::get('user/:name', 'User/read'); })->ext('html')->pattern(['id' => '\d+']);
url_controller_layer 構成をキャンセルします。
代わりに、エントリ ファイル内のcontrollerLayerメソッド設定を使用してください。
(new App())->controllerLayer('Action') ->run() ->send();
class_suffix 構成をキャンセルします
代わりに、エントリ ファイルで useClassSuffix メソッドを使用します。
(new App())->useClassSuffix(true) ->run() ->send();
controller_suffix 構成パラメーターと class_suffix 構成パラメーターを同時にキャンセルします。
mergeExtraVars メソッドと対応するパラメーターをキャンセルします
代わりに、ルーティング ルールで変数ルールを明示的に指定します。
ヘッダー メソッドのパラメーターの型の調整
強い型の制約により、ヘッダー メソッドは配列パラメーターの受け渡しのみをサポートするように変更されました。
強い型パラメーターを使用する
強い型パラメーターが完全に有効になり、厳密モードが使用されるため、パラメーターの型に必ず注意してください。
多くの ThinkPHP 入門チュートリアル はすべて PHP 中国語 Web サイトにあります。オンラインで学習することを歓迎します。
この記事は https://blog.thinkphp.cn/916515
から転載しています。以上がThinkPHP5.2: ルーティングの調整と改善の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。