我有一个我要传递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
答案 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;
});