Laravel API 具有非原始类型提示参数的端点

Laravel API endpoint with non-primitive type hinted parameter

我有一个 API 端点,我想将 UUID 传递给该端点。我正在使用一个名为 Laravel-UUID 的包将 UUID 集成到我的应用程序中。我希望采用 UUID 的 API 端点自动将参数解析为 Webpatser\Uuid\Uuid 类型,而不是我必须在每个中手动转换为 Webpatser\Uuid\Uuidstring我的端点。 Laravel 中有没有办法让它尝试解析任何名为 {uuid} 的路由参数,从 stringWebpatser\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');
}

我正在尝试通过 URL 调用上述代码,例如:

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

答案是:模型绑定

在您的 App\Providers\RouteServiceProvider 中添加到 boot() 方法:

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

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

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

    echo $uuid->string;

});