【问题标题】:Laravel API Route controller function parameterLaravel API 路由控制器功能参数
【发布时间】:2021-09-06 08:10:14
【问题描述】:

使用以下路由声明,我试图将参数传递给控制器​​方法,但我不确定如何执行此操作。我不想要一个路由参数,而是一个硬编码参数,这样我就可以使用相同的函数来更新当前用户和其他用户,使用参数来区分这两个操作。

Route::patch('/v1/user', [UserController::class, 'update']);

我需要将此 Route 语句中的布尔值传递给更新方法,有什么想法吗?

【问题讨论】:

  • 您如何访问您的 API?意思是你的前端语言是什么?您可以在请求中附加变量,您可以在 Laravel 控制器中读取这些变量。
  • 是的,我可以这样做,但我希望有单独的路线。 /api/v1/user 更新当前用户和 /api/v1/user/{id} 更新特定用户ID,但我想使用相同的控制器方法来实现这一点,用一个变量来通知控制器方法哪个路由正在调用该方法。
  • 那么你想要一个可选的查询参数:Route::patch('/v1/user/{id?}', ...); id 可以包含或排除,你可以在Controller方法中挂钩并采取相应的行动。
  • 谢谢@TimLewis,正是我所追求的。

标签: laravel


【解决方案1】:

你不是这个意思吗?
Route::patch('/v1/user/{id}', [UserController::class, 'update']);

【讨论】:

    【解决方案2】:

    有两种简单的方法可以做到这一点

    1. 更新用户的通用方法
    public function updateUser($user){...}
    

    然后你可以从其他控制器调用这个函数。这样,您的代码变得灵活且更易于测试/模拟

    1. 将 $id 设为可为空
    public function update($id = null)
    {
        if($id) {
            $user = User::find($id);
        } else {
            $user = auth()->user();
        }
        // Update user
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 2018-01-09
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2013-08-15
      相关资源
      最近更新 更多