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;
    }

.