【问题标题】:Laravel static Model is not returning errorLaravel 静态模型不返回错误
【发布时间】:2019-04-29 17:35:10
【问题描述】:

我有这个型号UserSetting.php

class UserSetting extends Model
{
    protected $fillable = ['user_id', 'name', 'setting_value'];

    public static function set($user_id, $name, $value)
    {

        if (!User::find($user_id)) {
            return error('NoForeign_User');
        }

        self::updateOrCreate(
            ['user_id' => $user_id, 'name' => $name],
            ['setting_value' => $value]
        );
    }
}

我想在UserSettingController.php 中这样使用它:

public function user(Request $request)
{
    Validator::make($request->all(), [
        'user_id'       => 'required|int',
        'name'          => 'required|string',
        'setting_value' => 'required|string',
    ], $this->messages)->validate();

    // HERE IS THE CALL
    UserSetting::set($request->user_id, $request->name, $request->setting_value);

    return saved();
}

我需要静态调用UserSetting,但不需要return

return UserSetting::set(...)

但是当静态函数到达if(!User::find($user_id)) 时,它会继续并显示saved() 助手而不是return error('NoForeign_User')

如果我使用 return return UserSetting::set(...) 执行此操作,它会正确显示错误。

这是正确的吗?除了返回静态类之外,我还有其他选择吗?

编辑

我的error() 函数是这样的:

function error($message, $code = 422)
{
    $response = ['message' => $message];
    if ($errors) {
        $response += [
            'errors' => $errors,
        ];
    }

    return response()->json([
        'message' => $message,
    ], $code);
}

【问题讨论】:

    标签: laravel static


    【解决方案1】:

    如果您在调用静态方法时不检查返回的结果,那么程序肯定会继续执行下一行,在您的情况下是 saved() 方法。

    为了停止执行,更好的方法是抛出一个异常,该异常将传播到Exception 处理程序并停止函数执行。

    所以不要这样:

    if (!User::find($user_id)) {
        return error('NoForeign_User');
    }
    

    试试这个:

    if (!User::find($user_id)) {
        throw new \Exception('NoForeign_User');
    }
    

    在我看来,我刚刚记得的另一种最好的方法是简单地使用findOrFail 函数:

    User::findOrFail($user_id);
    

    如果未找到用户,这也会引发异常。

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 2016-08-30
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2016-11-22
      相关资源
      最近更新 更多