Laravel 用户模型未在 JSON 响应中处理

Posted

技术标签:

【中文标题】Laravel 用户模型未在 JSON 响应中处理【英文标题】:Laravel user model not being process in JSON response 【发布时间】:2019-08-05 22:51:34 【问题描述】:

我有一个 Laravel 5.8 API,其中用户集合的 JSON 响应按预期工作,但模型失败。

namespace App\Traits;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;

trait ApiResponder

    private function successResponse($data, $code)
    
        return response()->json($data, $code);
    

    protected function errorResponse($message, $code)
    
        return response()->json(['error' => $message, 'code' => $code], $code);
    

    protected function showAll(Collection $collection, $code = 200)
    
        return $this->successResponse(['data' => $collection], $code);
    

    protected function showOne(Model $model, $code = 200)
    
        return $this->successResponse(['data' => $model], $code);
    

以下是调用响应的控制器方法。

public function index()

    $users = User::all();

    return $this->showAll($users);


public function update(Request $request, $id)

    $user = User::findOrFail($id);

    $rules = [
        'email' => 'email|unique:users,email,' . $user->id,
        'password' => 'min:6|confirmed'
    ];

    if ($request->has('name')) 
        $user->name = $request->name;
    

    if ($request->has('email') && $user->email != $request->email) 
        $user->verififed = User::UNVERIFIED_USER;
        $user->verififcation_token = User::generateVerificationCode();
        $user->email = $request->email;
    

    if ($request->has('password')) 
        $user->password = bcrypt($request->password);
    

    if (!$user->isDirty()) 
        return $this->errorResponse('You need to specify a change to update', 422);
    

    $user->save();

    $this->showOne($user);

index 方法句柄作为集合完美运行,但使用模型的 update 方法返回空(根本没有内容)。我已经确认 $data 变量确实包含预期的模型信息,因为我可以打印显示我想要的结果的 JSON 编码。由于某种原因,它在response()->json() 中不起作用。

【问题讨论】:

【参考方案1】:

它的实际作用非常复杂。

这里你有问题,不用说渲染响应,你需要一个返回。

    $user->save();

    $this->showOne($user);

应该是:

    $user->save();

    return $this->showOne($user);

奖励:我会研究响应转换以供将来参考,请参阅 Eloquent Resources 或 Fractal。您可以使用FormRequest 来验证输入,而不是做太多的 if 逻辑。

【讨论】:

感谢您的回复,当它很简单时令人沮丧。我一直在关注 udemy 上的教程来设置这个 API 并尝试使用最好的资源,但是嘿嘿。感谢您的帮助 如果对你有帮助,请将其标记为答案,这样可以帮助人们以后进入这篇文章。

以上是关于Laravel 用户模型未在 JSON 响应中处理的主要内容,如果未能解决你的问题,请参考以下文章

Laravel json 响应:response()->json() 或 $var->toJson()

在 Laravel json 响应中使用访问器和修改器

Jquery Json Array 响应未在 Div 中打印

如何在 laravel 刀片模板中使用 JSON 数据进行模型绑定?

Laravel - 使用唯一的 JSON 响应结构不正确

Laravel json() 响应返回值两次