ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP5.2: ルーティングの調整と改善

ThinkPHP5.2: ルーティングの調整と改善

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼転載
2019-12-16 15:10:242504ブラウズ

ThinkPHP5.2: ルーティングの調整と改善

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 サイトの他の関連記事を参照してください。

声明:
この記事はthinkphp.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。