路径模型绑定不适用于laravel

时间:2017-05-09 11:12:06

标签: 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']);
     });
});

您可以看到以/必需参数为前缀的所有RegisterLessonscourse路由。

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

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

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

但如果我在下面使用,那么一切都运转良好:

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

        return $course;
    }

似乎无法正确绑定模型。

有什么问题?

更新:

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

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

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

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

解决方案:

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

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

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

3 个答案:

答案 0 :(得分:0)

仔细看看:

// 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);
}

答案 1 :(得分:0)

正如你所说

  

课程参数是课程的ID

您可以使用Request来获取ID,请尝试使用

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

答案 2 :(得分:0)

我遇到了类似的问题。我认为您需要在路线上使用“绑定”中间件。 在这里查看我的答案:

https://stackoverflow.com/a/55949930/2867894