我是Laravel和Web编程的新手。我在教程中看到讲师,他使用控制器参数Route::get('/post/{id}', ['as'=>'home.post', 'uses'=>'AdminPostsController@post']);
将id
传递给控制器,与从控制器传递id
参数$request
有什么区别?
你能告诉我什么时候使用控制器参数和请求吗?
解释它的一种方法是引用你所指的HTTP动词GET。
对于返回 id 为 1 的帖子的 GET 请求,您将有两个选择:
/post/{id}
使用此方法(一种 restful 约定),您需要将变量作为参数传递给控制器操作以访问它。
public function view($id)
{
$post = Post::find($id);
...
}
/post?id=1
使用此方法,可以将 id 作为查询字符串参数传递到 url 内。然后在控制器中访问请求中的值。
public function view(Request $request)
{
$post = Post::find($request->input('id'));
...
}
现在,假设您要创建一个新Post
,该通常是对/post
端点的HTTP动词POST请求,您可以在其中使用Request
访问表单的有效负载。
public function create(Request $request)
{
$post = Post::create($request->only('description'));
}
现在,假设您要将当前Post
(通常是 HTTP 动词 PUT 请求)更新到/post/{id}
终结点,您将在其中通过参数获取模型,然后使用该请求更新数据。
public funciton update(Request $request, $id)
{
$post = Post::find($id);
$post->update($request->only('description'));
}
因此,有时您还将使用控制器参数与请求的组合。但通常,控制器参数适用于需要访问的路由内的单个项目。
假设你是Web开发的新手,特别是在Laravel中,我建议你阅读Laravel文档。posts/{id}
检索与该 ID 对应的后模型值。
Route::get('/post/1', 'AdminPostsController@post']); -> returns post that has an ID 1.
当像这样发送请求时posts/1
它将注入您的模型并返回相应的 id 值
或者您可以通过具有相应ID的控制器手动处理。
public function posts(Request $request)
{
returns Posts::find($request->id);
}