サーチ…


暗黙のバインド

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要求すると、 ID1のデータベースからUserインスタンスが注入されます。

一致するモデルインスタンスがデータベースに見つからない場合は、 404 HTTP応答が自動的に生成されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow