Php 路由模型绑定在laravel中的路由组上不起作用

Php 路由模型绑定在laravel中的路由组上不起作用,php,laravel,laravel-5.4,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', ['u

假设我有这些路线:

$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']);
     });
});
如您所见,所有
/
注册
课程
路线都以
课程
必需参数为前缀

课程
参数是我要用于路线模型绑定的
课程
模型的ID

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

    public function course_details (\App\Course $course)
    {
        dd($course);
    }
但是如果我使用下面的方法,所有的事情都很好:

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

        return $course;
    }
似乎无法正确绑定模型

问题是什么

更新:

事实上,我正在使用laravel包创建一个API。根据其配置定义的所有路由

但是有一个关于路由模型绑定的问题,为了支持路由模型绑定,我们必须向每个需要模型绑定的路由添加一个名为
binding
的中间件。描述它

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

在这种情况下,我不知道如何解决这个问题

解决方案:

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

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

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

// Here $course is the id of the Course
public function course_details ($course)
{
    $course =   Course::findOrFail($course);
    return $course;
}
但在这里:

// Here $course is the object of the model \App\Course
public function course_details (\App\Course $course)
{
    dd($course);
}
那应该是

public function course_details ($course, \App\Course $_course)
{
    // add your model here with object $_course

    // now $course return the id in your route
    dd($course);
}
正如你所说

课程参数是课程的ID

您可以使用
Request
获取id,如下所示

public function course_details (Request $request)
{
    return dd($request->course);
}

我遇到了一个类似的问题。我认为您需要在路由上使用“绑定”中间件。 请看我的回答:


为什么要添加“$\u课程”参数?laravel docs表示,有足够的类型提示变量名称与路由段名称匹配,laravel将自动注入模型实例,该实例的ID与请求URI中的相应值匹配。我不明白什么是$课程,必须添加它。