Generieren Sie Routen mithilfe von Anmerkungen


Solange Kommentare gemäß den PHPDOC-Regeln generiert werden, Sie können wertvolle Routing-Informationen extrahieren

Annotation-Routing

ThinkPHP unterstützt die Verwendung von Annotationen zum Definieren von Routen (auch Annotationen genannt). Routing) ist eine einfache Routenregistrierungsmethode (die grundlegende Routendefinition kann abgeschlossen werden). Sie ist standardmäßig geschlossen. Wenn Sie sie aktivieren müssen, legen Sie sie in der Routing-Konfigurationsdatei fest:

// 开启注解路由
'route_annotation'       => true,

Bei Bedarf Um das Annotation-Routing zu verwenden, müssen Sie zusätzliche Erweiterungen installieren:

composer require topthink/think-annotation

und diese dann einfach direkt in der Methodenannotation der Controller-Klasse definieren, zum Beispiel:

<?php
namespace app\controller;

class Index
{
    /**
     * @param  string $name 数据名称
     * @return mixed
     * @route('hello/:name')
     */
	public function hello($name)
    {
    	return 'hello,'.$name;
    }
}

@route('hello/ :name') ist Bitte achten Sie unbedingt auf die Angabe des Annotationsrouteninhalts, da sonst das Parsen der Annotationsroute fehlschlagen kann. Sie können die IDE verwenden, um standardisierte Annotationen zu generieren. Wenn Sie PHPStorm verwenden, wird empfohlen, das PHP-Annotations-Plugin zu installieren: https://plugins.jetbrains.com/plugin/7320-php-annotations , das die automatische Vervollständigung von Annotationen unterstützen kann.

Die auf diese Weise definierte Route wird im Debugging-Modus in Echtzeit wirksam. Im Bereitstellungsmodus müssen Sie den Befehl „optimize:route“ verwenden, um eine Routing-Regeldatei zu generieren.

Beachten Sie, dass @route( (Groß- und Kleinschreibung beachten, keine Leerzeichen zwischen Route und () erforderlich sind. Es wird empfohlen, die Routendefinition im letzten Absatz des Kommentars zu schreiben, andernfalls ist danach eine Leerzeile erforderlich .

Verwenden Sie dann die folgende URL-Adresse, um darauf zuzugreifen:

http://tp5.com/hello/thinkphp

Seitenausgabe

hello,thinkphp

Die standardmäßig registrierte Routing-Regel unterstützt alle Anforderungen. Wenn Sie den Anforderungstyp angeben müssen, können Sie den Anforderungstyp im zweiten Parameter angeben:

<?php
namespace app\controller;

class Index
{
    /**
     * @param  string $name 数据名称
     * @return mixed
     * @route('hello/:name','get')
     */
	public function hello($name)
    {
    	return 'hello,'.$name;
    }
}

Wenn Routing-Parameter vorhanden sind und Variablen Regeln müssen definiert werden, und Methoden können später direkt hinzugefügt werden, zum Beispiel:

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

Beachten Sie, dass Sie am Ende des Hinzufügens von Routing-Parametern und Variablenregeln keine Leerzeile hinzufügen müssen.

Unterstützt die Definition von Ressourcen in Klassenkommentaren, zum Beispiel:

<?php
namespace app\controller;

/**
 * @route('blog')
 */
class Blog
{
    public function index()
    {
    }

    public function read($id)
    {
    }

    public function edit($id)
    {
    }
}

Wenn Sie Routing-Gruppen definieren müssen, Sie können

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

verwenden. Die Annotationsroute im aktuellen Controller wird automatisch zur Blog-Gruppe hinzugefügt. Schließlich wird eine Routing-Regel für blog/hello/:name registriert Routengruppe. Zum Beispiel:

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