路由模型绑定不再适用于 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,
/*...*/
我创建了一个 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,
/*...*/