[英]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.