php - 路由模型绑定(bind)不适用于 laravel 中的路由组

标签 php laravel laravel-5.4

假设我有这些路线:

$api->group(['prefix' => 'Course'], function ($api) {
    $api->group(['prefix' => '/{course}'], function ($api) {
       $api->post('/', ['uses' => 'CourseController@course_details']);
       $api->post('Register', ['uses' => 'CourseController@course_register']);
       $api->post('Lessons', ['uses' => 'CourseController@course_lessons']);
     });
});

如您所见,所有 /RegisterLessons 路由都以 course 必需参数为前缀。

course 参数是我想用于路由模型绑定(bind)的 Course 模型的 ID。

但另一方面,当我想在 course_details 函数中使用 course 参数时,它返回 null。像这样:

    public function course_details (\App\Course $course)
    {
        dd($course);
    }

但如果我在下面使用,一切正常:

    public function course_details ($course)
    {
        $course =   Course::findOrFail($course);

        return $course;
    }

似乎无法正确绑定(bind)模型。

什么是问题?

更新:

事实上我正在使用 dingo-api laravel 包来创建 API。基于其配置定义的所有路由。

但是有一个关于路由模型绑定(bind)的问题,在哪里支持路由模型绑定(bind),我们必须为每个需要模型绑定(bind)的路由添加一个名为 binding 的中间件。 HERE是这样描述的。

存在的一个更大的问题是,当我想将 binding 中间件添加到路由组时,它不起作用,我必须将它添加到每个路由。

在这种情况下,我不知道该如何解决。

解决方案:

经过多次谷歌搜索后,我发现:

我发现必须在添加 auth.api 中间件的同一路由组中添加 bindings 中间件,而不是将其分别添加到每个子路由。
意思是这样的:

$api->group(['middleware' => 'api.auth|bindings'], function ($api) {
});

最佳答案

在kernel.php中添加

 use Illuminate\Routing\Middleware\SubstituteBindings;
    protected $routeMiddleware = [
             ...
            'bindings' => SubstituteBindings::class,
        ];

在你的组 route :

    Route::middleware(['auth:sanctum', 'bindings'])->group(function(){
    ... you routes here ...
    });

这对我有用。谢谢

关于php - 路由模型绑定(bind)不适用于 laravel 中的路由组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43868287/

相关文章:

php - 渴望加载嵌套多重关系

php - 如何在 laravel 中为给定的输入搜索两个表

php - HTTP 请求失败 - Google map

php - 列出用于选择和处理表单 php 的数据库值

php - 如何使用 Laravel Eloquent 将多条记录插入数据库

mysql - 从数据表中获取值

phpMyAdmin "Cannot load or save configuration"

php - 为什么 trim() 会使一个不存在的变量存在?

laravel - Laravel Socialite在本地主机上测试,SSL证书问题?

Laravel 作业在 DEALLOCATE 上留下一个空闲的 postgresql 进程