【发布时间】:2020-02-08 09:09:32
【问题描述】:
我知道,如果我有一个说 api/users/{id} 的路由,那么这将作为 $id 参数传递给控制器函数。
但是,如果我有一个 api 路由:
Route::patch('roadmap/{roadmapcourse}', 'RoadmapCourseController@update');
还有一个控制器方法:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\RoadmapCourse $roadmapcourse
* @return \Illuminate\Http\Response
*/
public function update(Request $request, RoadmapCourse $roadmapcourse)
{
$data = $request->validate([
'user_id' => 'required|integer',
'course_id' => 'required|integer',
'stage' => 'required|integer',
'title' => 'required|string',
'creator' => 'required|string',
'url' => 'required|string',
'hours' => 'required',
'completed' => 'required|boolean'
]);
$roadmapcourse->update($data);
return response($roadmapcourse, 200);
}
然后我向 http://projectname/api/roadmap/2 发送一个请求 - 然后 2 作为参数传递给更新函数不是吗?
但从更新函数的外观来看,它需要一个 RoadmapCourse 实例而不是单个数字,即“2”?
Laravel 是否会在后台搜索 ID 为 2 的 RoadmapCourse 的数据库条目,然后将其作为 $roadmapcourse 引入函数?
这是我唯一能想到的,我找不到任何解释发生了什么的文档。
P.S 我也找不到任何关于 $variable 类的变量命名约定的文档,即 RoadmapCourse $roadmapcourse,我了解它的作用,只是找不到任何文档。
P.P.S 我也找不到任何解释控制器方法上方的“docblocks”的文档,例如
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\RoadmapCourse $roadmapcourse
* @return \Illuminate\Http\Response
*/
而这些“@param”声明究竟是干什么用的??
任何帮助或文档链接将不胜感激(我一直在查看 Laravel 文档,但找不到任何提及或任何这些内容 - 因此在此处发布)
谢谢!
【问题讨论】:
-
我对 Laravel 的了解不够深入,无法了解完整的推理,但在您的示例中,您实际上是将
$roadmapcourse实例化为RoadmapCourse对象。如果您只是拥有Request $request, $roadmapcourse,则可以将$roadmapcourse作为标准变量访问,它可以是您在URL 中输入的任何内容,在本例中为 2 -
谢谢安迪。是的,我明白这一点。在这种情况下,我实际上是在尝试访问 id 为 2 的对象并且代码正在运行 - 我只是不明白它为什么会运行以及幕后发生了什么。 “路由模型绑定”就是答案。
-
啊,是的,我还没有真正研究过。我想我会继续这样做。感谢发帖!
标签: php laravel laravel-5 routes laravel-6