Maison >cadre php >PensezPHP >ThinkPHP5.2 : ajustements et améliorations du routage

ThinkPHP5.2 : ajustements et améliorations du routage

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼avant
2019-12-16 15:10:242506parcourir

ThinkPHP5.2 : ajustements et améliorations du routage

La partie routage de ThinkPHP5.2, comme les autres composants, a été rationalisée et optimisée, incluant principalement les aspects suivants :

Annuler le retour de route définition Parce que le format de tableau

n'est pas propice à la génération de cache de route, le fichier de définition de route annule la méthode de retour d'un tableau pour définir la route, et la méthode de routage doit être utilisée pour enregistrer l'itinéraire.

Par exemple :

return [
    'hello/:name' => 'index/hello',
];

doit être remplacé par :

Route::get('hello/:name', 'index/hello');

Emplacement du fichier de définition d'itinéraire pour plusieurs applications

Application unique En mode , le fichier de définition de route se trouve sous le répertoire de route comme auparavant. Si votre projet utilise plusieurs applications, la définition de route et la correspondance de chaque application sont indépendantes et il n'y a pas de concept de modules. Il doit se trouver dans le sous-répertoire route/application, par exemple :

route/index/route.php //  index应用的路由定义文件
route/index/web.php // index应用的第二个路由定义文件
route/admin/route.php //  admin应用的路由定义文件

La règle d'URL par défaut devient

http://域名/入口文件(或者应用名)/控制器名/操作名

La règle de routage de l'application est en fait le fichier d'entrée défini (ou la partie de l'URL après le nom de l'application), à l'exclusion de l'application.

Multi-application automatique

La dernière version 5.2 peut prendre en charge l'accès à plusieurs applications différentes dans le même fichier d'entrée (auparavant, il fallait en ajouter une pour chaque application Fichier d'entrée correspondant).

Par exemple, si vous utilisez :

(new App())->autoMulti()->run()->send();

dans le fichier d'entrée index.php, vous pouvez accéder automatiquement à plusieurs applications via des URL sans créer de fichier d'entrée

http://serverName/index.php/admin

Si votre l'application par défaut n'est pas index (la valeur par défaut est le nom du fichier d'entrée), vous pouvez alors spécifier l'application par défaut via la méthode de nom.

(new App())->autoMulti()
    ->name('admin')
    ->run()
    ->send();

prend en charge le mappage d'alias des noms d'applications, par exemple :

(new App())->autoMulti([
    'think'    =>    'admin',  // 把admin应用映射为think
])->run()->send();

Si vous devez personnaliser une application, vous pouvez utiliser

(new App())->autoMulti([
    'admin'    =>   function($app) {
        $app->debug(true)->useClassSuffix();
    }
])->run()->send();

pour annuler le routage d'alias

En raison de scénarios d'utilisation limités et de problèmes de surcharge de performances, la fonction de routage d'alias d'origine est annulée et il est recommandé d'utiliser le routage de ressources ou une route distincte à la place.

Annulation du routage des raccourcis

En raison de scénarios d'utilisation limités et du non-respect des spécifications, la fonction de routage des raccourcis d'origine du contrôleur a été annulée.

Annuler le contrôleur vide et l'opération à vide

Le contrôleur vide d'origine et la fonction d'opération à vide ont été annulés. Veuillez utiliser la fonction de routage MISS à la place, et elle peut être prise en charge. différents regroupements de routage configurent le routage MISS. Dans le même temps, la configuration empty_controller est supprimée.

Annuler la recherche automatique du contrôleur

Pour des raisons de performances, la fonction de recherche automatique du contrôleur multi-niveaux de routage a été annulée. Veuillez spécifier clairement l'itinéraire à acheminer. la définition de la règle de routage.

La fonction de routage est conçue indépendamment

La fonction de routage n'est plus fixe et conçue pour être un écouteur de réponse pour l'événement AppInit, et peut être configurée dans l'événement définition du projet. Les valeurs par défaut du système La définition et la configuration sont les suivantes :

return [
    'bind'      => [
    ],
    'listen'    => [
        'AppInit'      => [
            'think\listener\LoadLangPack',
            'think\listener\RouteCheck',
        ],
        'AppBegin'     => [
            'think\listener\CheckRequestCache',
        ],
        'ActionBegin'  => [],
        'AppEnd'       => [],
        'LogLevel'     => [],
        'LogWrite'     => [],
        'ResponseSend' => [],
        'ResponseEnd'  => [],
    ],
    'subscribe' => [
    ],
];

La classe thinklistenerRouteCheck sera exécutée dans l'événement AppInit. Si votre application n'a besoin d'aucune fonction de routage, vous pouvez le faire. annulez la définition dans le fichier de configuration et le système exécutera la planification URL par défaut (c'est-à-dire le contrôleur/l'action).

Annulez les paramètres d'option et de modèle de la méthode d'enregistrement

Annulez la méthode d'enregistrement de l'itinéraire (y compris règle/get/post/put/delete/patch/miss/group et autres méthodes) Les paramètres d'option et de modèle sont tous modifiés dans le formulaire d'appel de méthode. Par exemple, l'original :

Route::get('hello/:name', 'index/hello', [ 'ext'  =>  'html'], [ 'name'  => '\w+']);

doit être remplacé par

Route::get('hello/:name', 'index/hello')
    ->ext('html')
    ->pattern([ 'name'  => '\w+']);

Route group definition no. ne prend plus en charge les tableaux

Parce que cela n'est pas propice à la fonction d'imbrication des groupes, les définitions de groupes de routage ne prennent plus en charge les tableaux et ne peuvent être définies qu'à l'aide de fermetures. Par exemple :

Route::group('blog', [
    ':id' => 'Blog/read',
    ':name' => 'Blog/read',
])->ext('html')->pattern(['id' => '\d+']);

doit. être remplacé par

Route::group('blog', function() {
    Route::get(':id', 'Blog/read');
    Route::get(':name', 'Blog/read');
})->ext('html')->pattern(['id' => '\d+']);

si vous en avez besoin. Pour enregistrer un groupe de routage virtuel, vous pouvez directement utiliser la fermeture dans le premier paramètre

Route::group(function() {
    Route::get('blog/:id', 'Blog/read');
    Route::get('user/:name', 'User/read');
})->ext('html')->pattern(['id' => '\d+']);

Annuler la configuration url_controller_layer

et utilisez plutôt la méthode controllerLayer dans le fichier d'entrée.

(new App())->controllerLayer('Action')
    ->run()
    ->send();

Annulez la configuration class_suffix

Utilisez plutôt la méthode useClassSuffix dans le fichier d'entrée.

(new App())->useClassSuffix(true)
    ->run()
    ->send();

Annulez les paramètres de configuration controller_suffix et class_suffix en même temps.

Annulez la méthode mergeExtraVars et les paramètres correspondants

Au lieu de cela, spécifiez explicitement les règles de variable dans les règles de routage.

Ajustement du type de paramètre de la méthode d'en-tête

En raison de fortes contraintes de type, la méthode d'en-tête est modifiée pour prendre en charge uniquement la transmission des paramètres de tableau.

Utiliser des paramètres fortement typés

Étant donné que les paramètres fortement typés sont entièrement activés et que le mode strict est utilisé, assurez-vous de faire attention au type des paramètres.

De nombreux tutoriels d'introduction à ThinkPHP sont disponibles sur le site Web PHP chinois. Bienvenue pour apprendre en ligne !

Cet article est reproduit à partir de : https://blog.thinkphp.cn/916515

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer