[英]Laravel Eloquent Model Dependency Injection with preformated Id to find()
通常我们可以通过在参数中注入User
Class 来简化在 controller 中通过 id 查找用户的逻辑。 像这样:
class UserController extends Controller
{
public function show(User $id)
{
return $user;
}
}
但是现在我必须这样对待 Id 才能找到:
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function show(User $id)
{
$preformattedId = '98'.$id;
$user = User::find($preformattedId );
return $user;
}
}
我的基本问题是:如何在下面的代码中对我的预格式化 ID 实现同样的技巧,就像上面的代码一样?
注意:我必须以这种方式使用 ID,因为我使用的旧数据库实际上在每个 ID 中添加了“98”前缀,尽管我们只使用该前缀之后的字符。
您可以通过在路由器上使用显式绑定来使用控制反转。
在您的RouteServiceProvider
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return User::find('98'.$value);
});
}
或在您的User
model
/**
* Retrieve the model for a bound value.
*
* @param mixed $value
* @param string|null $field
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveRouteBinding($value, $field = null)
{
return $this->find('98'.$value);
}
你可以分享你的路线文件吗?
但是如果你的文件是
Route::get('user/{id}', 'UserController@show');
当你使用
class UserController extends Controller
{
public function show(User $id)
{
// you don't need use find function, it is make automatic by laravel
$user = $id;
return $user;
}
}
如果您想获取 id,只需在show
参数中删除User
类型
class UserController extends Controller
{
public function show($id)
{
$preformattedId = '98'.$id;
$user = User::find($preformattedId );
return $user;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.