2016-08-05 5 views
0

私はこれでしばらくの間苦労してきました。 ここに私が持っているコードがあります。ルーメンFatalThrowableError on validation

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

しかし、この1との事は私がどのように検証が失敗したときにキャッチするためにわからなかった、です。このように使用すると、検証に失敗する可能性はありますか? "laravel /ルーメン-フレームワーク":バージョンを使用して

"5.2。*"

+0

使用しているルーメンのバージョンは何ですか? –

+0

"laravel/lumen-framework": "5.2。*" – Serellyn

+0

下の私の答えは5.2です。 –

答えて

1

FatalThrowableError例外はsymfonyのデバッグErrorHandlerにより、通常スローされる低レベルの例外です。ルーメンでは、キューワーカーPhpEngine、コンソールカーネル、ルーティングパイプラインでも同様に使用されます。

はあなたがファサードを使用している場合は、行のコメントを外すことbootstrap/app.phpの内側にそれを有効にしていることを確認してください.env

  • .env.exampleをコピーし、次の

    1. のを確認してください。

    $app->withFacades();

    内部ルーメン5.2.8以下のいずれかが動作します。

    次は実際にはエラーのある有効なJSONオブジェクトを返します。それが十分でない理由をユースケースで詳しく説明していない。このようにvalidate呼び出しを使用するとうまくいくのは、実際には422 HTTPステータスコードを返します。これは未処理のエンティティを意味します。であること200ステータスコードを返すもののファサードを使用

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

    は、同様に動作します。

    $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()を使って2番目の例を試しました。私が気づいたことは、それは私のものとまったく同じですが、1つの違いがあり、それは1つのリクエスト変数だけを取ることでした。だから私は$ request-> all()でエラーを取得します。なぜ私はそれができないのだろうか?もう1つの質問、あなたの例では、検証はルーティングにあります、私は私のコントローラに私の持っている、それは問題ですか? – Serellyn

    +0

    それは、$ request-> all()と$ request-> only(['name'、 'surname'])の両方が配列を返します。しかし、$ request-> all()はarray_replace_recursiveを使用し、入力とアップロードされたファイルを結合します。次に、コントローラに検証を移すことに違いはなく、同じRequestオブジェクトを使用します。 –

    +0

    Well Leon、ありがとうございました:) – Serellyn