web-dev-qa-db-ja.com

「バインディング」ミドルウェアは、Laravel 5.6で何をしますか?

タイトル通り。 Laravel 5.6のデフォルトのAPIミドルウェアはKernel.php なので:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

どこでも見つけることができないbindingsの動作についての素人の説明に感謝します。

SubstituteBindingsメソッドを持つhandleクラスを使用します。

public function handle($request, Closure $next)
{
    $this->router->substituteBindings($route = $request->route());
    $this->router->substituteImplicitBindings($route);
    return $next($request);
}

私はそれが何をしているのかまだ従いませんが。

7
Inigo

私は同じ質問をして、これを見つけることができました:

Route model bindingはミドルウェアを使用して実現されています。すべてのアプリケーションは、app/Http/Kernel.phpファイルのWebミドルウェアグループにIlluminate\Routing\Middleware\SubstituteBindingsを追加する必要があります。

\ Illuminate\Routing\Middleware\SubstituteBindings :: class、

また、HTTPカーネルの$ routeMiddlewareプロパティにバインディング置換用のルートミドルウェアを登録する必要があります。

'バインディング' =>\Illuminate\Routing\Middleware\SubstituteBindings :: class、... "

これはこのページにあります- https://laravel.com/docs/5.3/upgrade

上記の答えは元々このソースからのものでした- https://stackoverflow.com/a/47784205/308984

つまり、bindingsミドルウェアは\Illuminate\Routing\Middleware\SubstituteBindings::classの単なる短縮形であるように思えますが、これが正しい場合、なぜLaravelがwebとの両方で同じ用語を使用していないのかわかりませんKernel.phpapi配列。web配列で\Illuminate\Routing\Middleware\SubstituteBindings::classを使用し、bindings配列でapiを使用するのは、一貫性がなく混乱しているようです。

9
user3089840

あなたが求めているのはこれだと思います https://laravel.com/docs/5.7/routing#route-model-binding

Route::get('api/users/{user}', function (App\User $user) {
    return $user->email;
});

それはすぐにUserモデルをバインドします。

3