二 路由的定义。

89 阅读1分钟

一 使用配置的定义 ,和laveral 类似。

1.1 路由配置

//config/route.php
Router::get("/test", 'App\Controller\TestController@test');
Router::get("/test2", 'App\Controller\TestController::test2');
Router::get("/test3", [App\Controller\TestController::class,'test3']);

1.2 写控制器做对。

<?php
//app\Controller\TestController

declare(strict_types=1);
namespace App\Controller;

class TestController extends AbstractController
{
    public function test()
    {
        return [
            'code'=>200,
            'message' => "hello test.",
        ];
    }
    public function test2()
    {
        return [
            'code'=>200,
            'message' => "hello test2.",
        ];
    }
    public function test3()
    {
        return [
            'code'=>200,
            'message' => "hello test3.",
        ];
    }
}

1.3测试使用。

curl 127.0.0.1:9501/test

{"code":200,"message":"hello test."}

curl 127.0.0.1:9501/test2

{"code":200,"message":"hello test2."}

curl 127.0.0.1:9501/test3

{"code":200,"message":"hello test3."}

1.4 其它例子。

<?php
use Hyperf\HttpServer\Router\Router;

// 此处代码示例为每个示例都提供了三种不同的绑定定义方式,实际配置时仅可采用一种且仅定义一次相同的路由

// 设置一个 GET 请求的路由,绑定访问地址 '/get' 到 App\Controller\IndexController 的 get 方法
Router::get('/get', 'App\Controller\IndexController::get');
Router::get('/get', 'App\Controller\IndexController@get');
Router::get('/get', [\App\Controller\IndexController::class, 'get']);

// 设置一个 POST 请求的路由,绑定访问地址 '/post' 到 App\Controller\IndexController 的 post 方法
Router::post('/post', 'App\Controller\IndexController::post');
Router::post('/post', 'App\Controller\IndexController@post');
Router::post('/post', [\App\Controller\IndexController::class, 'post']);

// 设置一个允许 GET、POST 和 HEAD 请求的路由,绑定访问地址 '/multi' 到 App\Controller\IndexController 的 multi 方法
Router::addRoute(['GET', 'POST', 'HEAD'], '/multi', 'App\Controller\IndexController::multi');
Router::addRoute(['GET', 'POST', 'HEAD'], '/multi', 'App\Controller\IndexController@multi');
Router::addRoute(['GET', 'POST', 'HEAD'], '/multi', [\App\Controller\IndexController::class, 'multi']);

二 使用注解 AutoController

2.1 在控制器,加上注解.

<?php
declare(strict_types=1);
namespace App\Controller;

use Hyperf\HttpServer\Annotation\AutoController;
/**
 * @AutoController(prefix="test2")
 */

class Test2Controller extends AbstractController
{
    public function test()
    {
        return [
            'code'=>200,
            'message' => "hello test.",
        ];
    }
    public function test2()
    {
        return [
            'code'=>200,
            'message' => "hello test2.",
        ];
    }
    public function test3()
    {
        return [
            'code'=>200,
            'message' => "hello test3.",
        ];
    }
}

2.2 测试使用。

curl 127.0.0.1:9501/test2/test

{"code":200,"message":"hello test."}

curl 127.0.0.1:9501/test2/test2

{"code":200,"message":"hello test2."}

curl 127.0.0.1:9501/test2/test3

{"code":200,"message":"hello test3."}

三 使用Controller + requestMapping 注解

<?php
declare(strict_types=1);
namespace App\Controller;

use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;

/**
 * @Controller
 */

class Test3Controller extends AbstractController
{
    /**
     * @RequestMapping(path="test", methods="get,post")
     */
    public function test(RequestInterface $request)
    {
        // 从请求中获得 id 参数
        $id = $request->input('id', 1);
        return (string)$id;
    }

    /**
     * @RequestMapping(path="test2", methods="get,post")
     */
    public function test2()
    {
        return [
            'code'=>200,
            'message' => "Test3Controller test2.",
        ];
    }

    /**
     * @RequestMapping(path="test3", methods="get,post")
     */
    public function test3()
    {
        return [
            'code'=>200,
            'message' => "Test3Controller test3.",
        ];
    }

}