验证

时间:2016-08-05 08:44:12

标签: php validation fatal-error lumen

我现在已经挣扎了一段时间了。 这是我的代码。

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

问题是我的脸上有一个FatalThrowableError,并带有以下消息:

  

调用数组

上的成员函数parameter()

我无法找到我做错的事。我在这里感谢一些帮助。 此外,我之前已经进行了此验证:

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

但是这个问题是,我不知道在验证失败时如何捕获。以这种方式使用它是否有可能捕获验证失败?

使用版本:" laravel / lumen-framework":" 5.2。*"

1 个答案:

答案 0 :(得分:2)

FatalThrowableError异常是symfony debug ErrorHandler通常抛出的低级异常。在流明中,队列工作者,PhpEngine,控制台内核和路由管道也使用它。

确保以下

  1. 您已将.env.example复制到.env
  2. 如果您使用的是Facades,请确保通过取消注释该行在bootstrap/app.php内启用它。
  3. $app->withFacades();

    内部Lumen 5.2.8以下任何一种都可以使用。

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

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

    使用外观也可以,但是会返回200状态代码。

    $app->get('/', function (Request $request) {        
        $validator = Validator::make($request->only(['name']), [
            'name' => 'required'
        ]);
    
        if ($validator->fails()) {
            return ['error' => 'Something went wrong'];
        }
    });
    

    如果您仍未使用Validator::make,则可以使用默认验证例外。感觉有点哈哈。

    $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'];
        }
    });