路由模型绑定不再适用于 Laravel 8.x 中的 api 包开发

route model binding doesn't work anymore with api package devolpment in in Laravel 8.x

我创建了一个 api,它随包开发作曲家一起提供。在 Laravel 7 中,可以添加路由模型绑定:

Route::group(['namespace' => 'Acme\Package\app\Http\Controllers\Api'], function () {

// fomer possibility:
Route::apiResource('api/comments/', 'CommentController')->middleware('bindings');});

在 Laravel 8 这已经不可能了。最近几天我几乎尝试了所有方法,但是路由模型绑定不起作用,或者找不到 class:

Target class [bindings] does not exist.

我真的希望有人能 post 问题的答案、提示或任何有用的东西。

非常感谢

编辑:

感谢您的回答,包括 Route::group 中提到的中间件:

Route::group(['namespace' => 'Acme\Package\app\Http\Controllers\Api', 'middleware' => 'Illuminate\Routing\Middleware\SubstituteBindings']

做到了。

如果您依赖某人应用程序中的值存在,则必须小心。如果我想在我的 HTTP 内核中使用,我可以为该中间件使用不同的 name/alias。在这样引用它时,您应该为来自框架的中间件使用 FQCN。

在默认 Laravel 8 安装中没有中间件 named/aliased 作为 'bindings'。它由其 FQCN Illuminate\Routing\Middleware\SubstituteBindings 引用,这可能是您从包中引用它的方式。

如果您愿意,您可以提供一个配置文件供他人更改这些内容。然后你可以使用你的配置来知道要引用哪个中间件。

在 Laravel 8 中,此中间件的别名已被删除。您可以使用它的完整 class 名称

Illuminate\Routing\Middleware\SubstituteBindings

或将别名添加回 $routeMiddleware 中的 app/Http/Kernels.php,如下所示:

protected $routeMiddleware = [
 'auth'       => Authenticate::class,
 'bindings'   => Illuminate\Routing\Middleware\SubstituteBindings, 
/*...*/