Laravel 使用控制器参数与请求将数据传递给控制器

Laravel passing data to controller using controller parameter vs request

我不熟悉 Laravel 和网络编程。我在教程中看到讲师,他通过使用 控制器参数
id 传递给控制器 Route::get('/post/{id}', ['as'=>'home.post', 'uses'=>'AdminPostsController@post']); ,与从控制器通过 $request 参数传递 id 相比有什么区别?
你能告诉我什么时候使用控制器参数和请求吗?

假设你是Web开发的新手,尤其是Laravel,我建议你阅读Laraveldocumentationposts/{id} 检索对应于该 ID 的 post 模型值。

Route::get('/post/1', 'AdminPostsController@post']); -> returns post that has an ID 1.

当向你发送这样的请求时posts/1它会注入你的模型和returns对应的id值

或者你可以手动通过对应id的controller处理

public function posts(Request $request)
{
    returns Posts::find($request->id);
}

解释它的一种方法是参考您所指的 HTTP 动词 GET。

对于 return a post 的 GET 请求,其中 id 为 1,您将有两个选择:

  1. /post/{id}

使用此方法(restful 约定)您需要将变量作为参数传递给控制器​​操作以访问它。

public function view($id)
{
    $post = Post::find($id);
    ...
}
  1. /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,这通常是对 /post/{id} 端点的 HTTP 动词 PUT 请求,您将在其中通过参数获取模型,然后更新数据使用请求。

public funciton update(Request $request, $id)
{
    $post = Post::find($id);
    $post->update($request->only('description'));
}

因此有时您也会将控制器参数与请求结合使用。但通常控制器参数用于您需要访问的路由内的单个项目。