Laravel 5.6 中的“绑定”中间件有啥作用?

Posted

技术标签:

【中文标题】Laravel 5.6 中的“绑定”中间件有啥作用?【英文标题】:What does "bindings" middleware do in Laravel 5.6?Laravel 5.6 中的“绑定”中间件有什么作用? 【发布时间】:2019-01-07 19:28:36 【问题描述】:

正如标题。 Laravel 5.6 中默认的 api 中间件在 Kernel.php 中列出为:

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

我很感谢外行对 bindings 所做的解释,我在任何地方都找不到。

它使用具有handle 方法的SubstituteBindings 类:

public function handle($request, Closure $next)

    $this->router->substituteBindings($route = $request->route());
    $this->router->substituteImplicitBindings($route);
    return $next($request);

虽然我还是不明白它的作用。

【问题讨论】:

我在发布问题后开始阅读 - 谢谢。但是我仍然不清楚这与文档的那一小部分没有提到的绑定中间件有什么关系。在我可以使用路由模型绑定之前,我是否必须通过这个中间件传递所有路由?文档的该部分似乎另有建议。 【参考方案1】:

我有同样的问题,并且能够找到这个:

"Route model binding 现在使用中间件完成。所有 应用程序应添加 照亮\路由\中间件\替代绑定到您的网络 app/Http/Kernel.php 文件中的中间件组:

\Illuminate\Routing\Middleware\SubstituteBindings::class,

您还应该注册一个路由中间件以进行绑定替换 在 HTTP 内核的 $routeMiddleware 属性中:

'绑定' => \Illuminate\Routing\Middleware\SubstituteBindings::class, ..."

可以在此页面上找到 - https://laravel.com/docs/5.3/upgrade

以上答案最初来自此来源-https://***.com/a/47784205/3089840

所以在我看来,bindings 中间件只是\Illuminate\Routing\Middleware\SubstituteBindings::class 的缩写词——如果这是正确的,我不确定 Laravel 为什么不在 webKernel.php 中的 api 数组。在web 数组中使用\Illuminate\Routing\Middleware\SubstituteBindings::class 和在api 数组中使用bindings 似乎有点不一致和混乱。

【讨论】:

【参考方案2】:

我想你要的是这个https://laravel.com/docs/5.7/routing#route-model-binding

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

它立即绑定用户模型。

【讨论】:

以上是关于Laravel 5.6 中的“绑定”中间件有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在 laravel 5.6 中找出路由文件的当前路径? [复制]

php Laravel 5.6 CORS中间件

Laravel 5.6 空字段验证

laravel 从 5.6 作曲家升级到 5.7 不起作用

Laravel 5.6 OneToOne 关系不起作用

Laravel 5.6 上的 Ajax 身份验证重定向