2016-08-05 57 views
0

我一直在努力与此一段时间了。 这是我得到的代码。Lumen FatalThrowableError验证

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

的问题是,我得到一个FatalThrowableError在我的脸上,出现以下消息权利:

呼叫到阵列的成员函数的参数()

我找不到我做错了什么。我会很感激这里的一些帮助。 并且还,我有这个验证其工作过:

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

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

使用的版本: “laravel /流明框架”: “5.2 *。”

+0

你使用什么版本的流明? –

+0

“laravel/lumen-framework”:“5.2。*” – Serellyn

+0

我的回答如下5.2 –

回答

1

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

进行以下

  1. 确保如果您使用的外立面已复制到.env.example.env
  2. ,请确保您通过取消注释行启用这里面bootstrap/app.php

$app->withFacades();

里面流明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']; 
    } 
}); 
+0

.env文件和外观已经到位,没有问题。然后我用$ validator-> fails()来尝试你的第二个例子。我注意到的一件事是它和我的完全一样,但有一个区别,那就是你只需要一个请求变量。所以我得到$ request-> all()的错误。我真的很想知道为什么不能这样做?还有一个问题,在你的例子中,验证是在路由中,我的控制器中有我的问题,这是一个问题吗? – Serellyn

+0

奇怪的是,$ request-> all()和$ request-> only(['name','surname'])都会返回数组。但是,$ request-> all()使用array_replace_recursive并将输入与上传的文件组合在一起。然后将验证移动到控制器将没有区别,它将使用相同的Request对象。 –

+0

好莱昂,谢谢你的帮助:) – Serellyn