2016-08-05 58 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