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

时间:2017-10-30 05:56:09

标签: laravel request laravel-controller

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

2 个答案:

答案 0 :(得分:1)

解释它的一种方法是引用你正在引用的HTTP动词GET。

对于GET请求返回id为1的帖子,您将有两个选项:

  1. /post/{id}
  2. 使用此方法(一个宁静的约定),您需要将变量作为参数传递给控制器​​操作以访问它。

    public function view($id)
    {
        $post = Post::find($id);
        ...
    }
    
    1. /post?id=1
    2. 使用此方法,您可以将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'));
      }
      

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

答案 1 :(得分:0)

假设您是Web开发的新手,特别是在Laravel,我建议您阅读Laravel documentationposts/{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);
}