【问题标题】:Laravel passing data to controller using controller parameter vs requestLaravel 使用控制器参数与请求将数据传递给控制器
【发布时间】:2017-10-30 05:56:09
【问题描述】:

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

【问题讨论】:

    标签: laravel request laravel-controller


    【解决方案1】:

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

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

    1. /post/{id}

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

    public function view($id)
    {
        $post = Post::find($id);
        ...
    }
    
    1. /post?id=1

    使用此方法,您可以在 url 中将 id 作为查询字符串参数传递。然后在控制器中访问请求中的值。

    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'));
    }
    

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

    【讨论】:

    • 在您的update 函数示例中,id 是使用/post/{id} 传递的。我尝试使用类似的示例public function myUpdate(Request $request) 并使用/post 端点。我也可以通过使用public function myUpdate(Request $request){ $post = Post::find($request['id']); $post->update($request->only('description'));} 获得相同的id。两种方式都可以吗?
    • 您这边的 id 不可能是表单的一部分,也许是隐藏字段?更新资源时,最好明确使用您的端点,即。 /post/{id}不仅仅是/post
    • 是的,我的意思是隐藏字段。使用隐藏字段更新和传递 id 是否可以接受?
    • 当然,这是可以接受的,但就个人而言,最好更明确一些。我想说尽可能靠近资源/宁静endpoints 是件好事。例如,您的 create 路线会是什么?
    • 你是这个意思吗? admin/posts/create,这条名为 admin.posts.create 的路由我使用 Route::resource 定义,而/post/{id} 的目的只是显示帖子。抱歉,我对 Laravel 术语的理解仍然很差,但感谢您提供的信息
    【解决方案2】:

    假设你是 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);
    }
    

    【讨论】:

    • 好的,很抱歉不清楚。我知道如何通过控制器参数传递 id 变量,那么如果我们只是通过 $request 参数传递它有什么区别。例如:public function post(Request $request){$data['id'] = $request['id']} 与路由:Route::get('/post/{id}', 'AdminPostsController@post']);
    • 什么时候应该通过控制器request手动处理或使用post/{id}注入?
    猜你喜欢
    • 2016-11-26
    • 2014-12-08
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    相关资源
    最近更新 更多