2017-05-09 76 views
3

假设我有以下途径:路线模型绑定在laravel的航线组不起作用

$api->group(['prefix' => 'Course'], function ($api) { 
    $api->group(['prefix' => '/{course}'], function ($api) { 
     $api->post('/', ['uses' => '[email protected]_details']); 
     $api->post('Register', ['uses' => '[email protected]_register']); 
     $api->post('Lessons', ['uses' => '[email protected]_lessons']); 
    }); 
}); 

正如你可以看到一个course所需的参数为前缀的/RegisterLessons路线。

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

但另一方面,当我想要使用course参数,例如在​​函数中,它返回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中间件添加到路由组时,它不起作用,我必须将其添加到每个路由。

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

解决方案:

许多谷歌搜索后,我发现:

我发现必须向加auth.api中间件而不是将其分别添加到每个子路线原路组中添加bindings中间件。
意味着这样的:

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

回答

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); 
} 
+0

为什么我添加一个'$ _course'参数? laravel docs说这足够了** _ type-hinted变量名称匹配路径段名称Laravel将自动注入具有与来自请求URI _ **的相应值相匹配的ID的模型实例。我不明白什么是$ _course,必须添加它。 –

0

正如你所说

当然参数是一个课程

您可以使用Request获得ID的ID,尝试这样

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