Lumen FatalThrowableError 验证

Lumen FatalThrowableError on validation

我已经为此苦苦挣扎了一段时间。 这是我得到的代码。

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:100'
    ]);
    if ($validator->fails()) {
        //do something
    }
}

问题是我遇到了一个 FatalThrowableError,并显示以下消息:

Call to a member function parameter() on array

我找不到我做错了什么。我会很感激这里的一些帮助。 而且,我之前已经进行了此验证:

    $this->validate($request, [
        'name' => 'required|unique:developers|max:100'
    ]);

但是这个问题是,我不知道如何在验证失败时捕捉到。这样使用时是否可以捕获验证失败?

使用版本:"laravel/lumen-framework":“5.2.*”

A FatalThrowableError 异常是低级异常,通常由 symfony 调试 ErrorHandler 抛出。在 lumen 中,队列工作者、PhpEngine、控制台内核和路由管道也使用它。

确保以下内容

  1. 您已将 .env.example 复制到 .env
  2. 如果您正在使用 Facades,请确保通过取消注释行在 bootstrap/app.php 中启用它。

$app->withFacades();

在 Lumen 5.2.8 中,以下任何一个都可以工作。

以下实际上 return 一个有效的 JSON 对象,但有错误。您没有详细说明您的用例为什么这还不够。像这样使用 validate 调用的好处是它实际上 return 是一个 422 http 状态代码,这意味着一个未处理的实体。

$app->get('/', function (Request $request) {
    $this->validate($request, [
        'name' => 'required'
    ]);
});

使用 facade 也可以,尽管 return 是一个 200 状态码。

$app->get('/', function (Request $request) {        
    $validator = Validator::make($request->only(['name']), [
        'name' => 'required'
    ]);

    if ($validator->fails()) {
        return ['error' => 'Something went wrong'];
    }
});

如果您仍然无法正确使用 Validator::make,您可以使用捕获默认验证异常。感觉有点hacky。

$app->get('/', function (Request $request) {
    try {
        $this->validate($request, [
            'name' => 'required'
        ]);
    } catch (\Illuminate\Validation\ValidationException $e) {
        // do whatever else you need todo for your use case
        return ['error' => 'We caught the exception'];
    }
});