Конечная точка API Laravel с хинтированным параметром непримитивного типа - PullRequest
0 голосов
/ 27 мая 2018

У меня есть конечная точка API, которой я хочу передать UUID.Я использую пакет под названием 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');
}

Я пытаюсь вызвать вышеуказанный код с помощью URL-адреса, например:

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

1 Ответ

0 голосов
/ 27 мая 2018

Ответ: привязка модели .

Добавьте к boot() метод в вашем App\Providers\RouteServiceProvider:

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

И когда вы получите доступ к {uuid} из вашего маршрута, вы получите объект Uuid, например:

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

    echo $uuid->string;

});
...