具有非基本类型提示参数的Laravel API端点

时间:2018-05-27 15:31:27

标签: php laravel uuid

我有一个我要传递UUID的API端点。我正在使用名为Laravel-UUID的程序包将UUID集成到我的应用程序中。我希望我的API端点将UUID自动解析为Webpatser\Uuid\Uuid类型而不是string,我必须在每个端点中手动转换为Webpatser\Uuid\Uuid。在Laravel中是否有办法让它尝试将{uuid}中名为string的任何路径参数解析为Webpatser\Uuid\Uuid

web.php

Route::get('/mycontroller/test/{uuid}', 'Web\MyController@test')->name('test');

MyController.php

use Webpatser\Uuid\Uuid;

...

public function test(Request $request, Uuid $uuid): RedirectResponse
{
    echo 'My UUID: ' . $uuid->string;

    return redirect()->route('home');
}

我试图通过以下网址调用上述代码:

http://localhost:8000/mycontroller/test/9ec21125-6367-1ab3-9c88-d6de3990ff81

1 个答案:

答案 0 :(得分:3)

答案是:模型绑定

boot()中添加App\Providers\RouteServiceProvider方法:

Route::bind('uuid', function ($value) {
    return Uuid::import($value);
});

当您从路线中访问{uuid}时,您将获得Uuid对象,例如:

Route::get('test/{uuid}', function($uuid) {

    echo $uuid->string;

});