Générer des itinéraires à l'aide d'annotations
Tant que les annotations sont générées conformément aux règles PHPDOC, des informations de routage précieuses peuvent être extraites
Routage d'annotation
ThinkPHP prend en charge l'utilisation d'annotations pour définir des routes (également appelées routage d'annotations), ce qui est un Méthode d'enregistrement de route simple (la définition de base de la route peut être complétée), fermée par défaut. Si vous devez l'activer, définissez-la dans le fichier de configuration de routage :
// 开启注解路由 'route_annotation' => true,
Si vous devez utiliser le routage d'annotations, vous devez installer des extensions supplémentaires :
composer require topthink/think-annotation
Ensuite, il vous suffit de contrôler directement. Il est défini dans l'annotation de méthode de la classe d'appareil, par exemple :
<?php namespace app\controller; class Index { /** * @param string $name 数据名称 * @return mixed * @route('hello/:name') */ public function hello($name) { return 'hello,'.$name; } }
@route('hello/:name') est le contenu de l'annotation route. faites attention à la spécification de l'annotation, sinon cela pourrait entraîner l'échec de l'analyse de la route d'annotation. Vous pouvez utiliser l'EDI pour générer la spécification. Si vous utilisez PHPStorm, il est recommandé d'installer le plug-in PHP Annotations : https://plugins.jetbrains.com/plugin/7320-php-annotations , qui peut prendre en charge la complétion automatique des annotations.
Les routes ainsi définies prennent effet en temps réel en mode débogage. En mode déploiement, vous devez utiliser la commande optimise:route pour générer un fichier de règles de routage.
Notez que @route(( est sensible à la casse et il ne doit y avoir aucun espace entre route et (). Il est recommandé d'écrire la définition de la route dans le dernier paragraphe du commentaire, sinon une ligne vide est nécessaire après
Utilisez ensuite l'adresse URL suivante pour accéder :
http://tp5.com/hello/thinkphp
Sortie de la page
hello,thinkphp
Les règles de routage enregistrées par défaut prennent en charge toutes les demandes. Si vous devez spécifier le type de demande, vous pouvez spécifier le type de demande dans le deuxième paramètre :
.<?php namespace app\controller; class Index { /** * @param string $name 数据名称 * @return mixed * @route('hello/:name','get') */ public function hello($name) { return 'hello,'.$name; } }
S'il y a des paramètres de routage et des règles variables qui doivent être définis, vous pouvez ajouter des méthodes directement à la fin, par exemple :
<?php namespace app\controller; class Index { /** * @param string $name 数据名称 * @route('hello/:name','get') * ->https() * ->pattern(['name' => '\w+']) * * @return mixed */ public function hello($name) { return 'hello,'.$name; } }
Notez que vous n'avez pas besoin d'ajouter à la fin de l'ajout de paramètres de routage et de règles variables. , et assurez-vous qu'il y a une ligne vide entre les autres commentaires qui suivent
Définitions de prise en charge dans les commentaires de classe, par exemple :
<?php namespace app\controller; /** * @route('blog') */ class Blog { public function index() { } public function read($id) { } public function edit($id) { } }
Si vous devez définir un groupe de routage, vous pouvez utiliser
<?php namespace app\controller; use think\annotation\route\Group; use think\annotation\route\Route; /** * @Group("blog") */ class Blog { /** * @param string $name 数据名称 * @return mixed * @Route("hello/:name", method="GET") */ public function hello($name) { return 'hello,'.$name; } }
Le routage d'annotations dans. le contrôleur actuel sera automatiquement ajouté au groupe de blog. Enfin, une règle de routage pour blog/hello/:name sera enregistrée, tout comme vous. Des paramètres publics peuvent être définis pour ce groupe de routage, par exemple :
<?php namespace app\controller; use think\annotation\route\Middleware; use think\annotation\route\Group; use think\annotation\route\Route; use think\middleware\SessionInit; /** * @Group("blog",ext="html") * @Middleware({SessionInit::class}) */ class Blog { /** * @param string $name 数据名称 * @return mixed * @Route("hello/:name",method="GET") */ public function hello($name) { return 'hello,'.$name; }
.