【发布时间】:2021-10-05 02:10:51
【问题描述】:
我在routes/api.php有以下路线:
Route::get('items/{item}', function(Guid $item) {...});
Route::get('users/{user}', function(Guid $user) {...});
由于Guid 是一个自定义类型,我该如何通过依赖注入解决这个问题?如图,路由参数{item}与回调参数type-hint:Guid不同,无法自动解析。
这就是我在 app/Providers/AppServiceProvider.php 中尝试过的:
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(Guid::class, function(Application $app, array $params) {
return Guid::fromString($params[0]);
});
}
}
我希望$params 是这样的:[ 'item' => 'guid' ]——但它是:[]。
【问题讨论】:
-
{item}与Guid $item的差异有多大?第一个是字符串(URL-.Path 的子字符串),而第二个根本不是字符串?根据您的理解,Laravel 通常如何将 URL-Path 子字符串映射到 any PHP 对象类型?还是您在其他地方看到了不同之处? -
item 路由参数是一个 guid 字符串,而 Guid 是一个包装器对象,它具有一些实用方法,如验证。 Laravel 通常映射到模型。但是由于我必须自己实现模型(它不是像 Laravel 的模型那样的数据库模型),我想,这样解决它比实现整个
URLRoutable合约更容易。
标签: php laravel laravel-8 laravel-routing laravel-service-container