【问题标题】:Lumen: update records via json bodyLumen:通过 json body 更新记录
【发布时间】:2017-07-28 20:48:42
【问题描述】:

我有一个 Laravel Lumen API。我发现更新功能存在问题。

在我的控制器中,更新项目的代码是:

public function update(Request $request, $id)
    {

        $this->validate($request, [
            'name' => 'required',
            'description' => 'required',
            'completed' => 'required',
         ]);

        $todo = Todo::find($id);
        $todo->name = $request->name;
        $todo->description = $request->description;
        $todo->completed = $request->completed;
        $todo->save();
        return response()->json(['status' => 'success']);
    }

我可以使用以下方法更新待办事项:

http://lumen-todo.app/api/51?name=test&description=test&completed=1 

但是希望我可以像这样在 json 正文中发送参数

PUT http://lumen-todo.app/api
{
  "id": 1
  "name": "Test",
  "description": "Test",
  "completed": 1,
}

对于添加项目,它通过 json body 工作,所以不明白为什么它不适用于更新。有关信息,“添加项目”控制器代码在这里:

public function store(Request $request)
{

    $this->validate($request, [
        'name' => 'required',
        'description' => 'required',
        'completed' => 'required'
     ]);

    $todo = new Todo();
    $todo->name = $request->name;
    $todo->description = $request->description;
    $todo->completed = $request->completed;
    $todo->save();
    return response()->json(['status' => 'success']);

}

【问题讨论】:

    标签: laravel lumen


    【解决方案1】:

    如果你想从请求负载中获取 json 数据,验证并存储它,使用

    public function store(Request $request)
    {
        $data = $request->json()->all();
    
        $this->validate($data, [
            'name' => 'required',
            'description' => 'required',
            'completed' => 'required'
         ]);
    
        $resource = $this->model->find($id);
    
        $resource->fill($request);
        $resource->save();
    
        return response()->json(['status' => 'success']);    
    }
    

    【讨论】:

      【解决方案2】:

      不要这样做:

      $todo = new Todo();
      $todo->name = $request->name;
      $todo->description = $request->description;
      $todo->completed = $request->completed;
      $todo->save();
      

      这样做:

      use App\Todo;
      
      protected $model;
      
      public function __construct(Todo $model) {
          $this->model = $model;
      }
      
      $resource = $this->model->find($id);
      $resource->fill($request);
      $resource->save();
      

      另外,您可以使用json_decode() 函数将您的 json 参数更改为数组,并使用它来验证和保存数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多