サーチ…
暗黙のバインド
Laravelは、変数名がルートセグメント名と一致するルートまたはコントローラアクションで定義されたEloquentモデルを自動的に解決します。例えば:
Route::get('api/users/{user}', function (App\User $user) {
return $user->email;
});
この例では、経路上に定義されたEloquent $ユーザ変数が経路URIの{user}セグメントと一致するため、Laravelは要求URIからの対応する値と一致するIDを持つモデルインスタンスを自動的に注入します。一致するモデルインスタンスがデータベースに見つからない場合は、404 HTTP応答が自動的に生成されます。
モデルのテーブル名が複数の単語から構成されている場合、暗黙のモデルバインディングを動作させるには、入力変数はすべて小文字にする必要があります。
たとえば、ユーザーが何らかのアクションを実行でき、このアクションにアクセスしたい場合、ルートは次のようになります。
Route::get('api/useractions/{useraction}', function (App\UserAction $useraction) {
return $useraction->description;
});
明示的なバインディング
明示的なバインディングを登録するには、ルータのモデルメソッドを使用して、指定されたパラメータのクラスを指定します。明示的なモデルバインディングは、RouteServiceProviderクラスのbootメソッドで定義する必要があります
public function boot()
{
parent::boot();
Route::model('user', App\User::class);
}
次に、{user}パラメータを含むルートを定義できます。
$router->get('profile/{user}', function(App\User $user) {
});
すべての{user}
パラメータをApp\User
モデルにバインドしているので、Userインスタンスがルートに注入されます。たとえば、 profile/1
要求すると、 IDが1のデータベースからUserインスタンスが注入されます。
一致するモデルインスタンスがデータベースに見つからない場合は、 404 HTTP応答が自動的に生成されます。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow