我看過以下路線:
Route::prefix('/users/{user}')->group(function () {
Route::get('groups/{group}', 'UserGroupController@show');
}
在UserGroupController中:
use App\Group;
public function show(Request $request, User $user, Group $group)
{
dd($group);
}
我的問題是如何$group從原始路由引數字串在這里構造模型物件?
我的猜測是 laravel 的服務容器做了以下魔法(也許像
- 注入 Group 模型,
- 然后做某事
Group::where('id', $group)->first()
但不確定這一點。
uj5u.com熱心網友回復:
你猜對了。在檢索模型的核心服務提供者中有一個系結。如果您呼叫,系結模型是相同的:
$temp = new Group
$model = Group::where($temp->getRouteKeyName(), request()->route('group'))->firstOrFail();
UPD。實際上剛剛發現它發生的地方:
/**
* Retrieve the model for a bound value.
*
* @param \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Relations\Relation $query
* @param mixed $value
* @param string|null $field
* @return \Illuminate\Database\Eloquent\Relations\Relation
*/
public function resolveRouteBindingQuery($query, $value, $field = null)
{
return $query->where($field ?? $this->getRouteKeyName(), $value);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431079.html
