1

検証はInput::jsonでは機能しません。json_decode / using arrayを使用してさまざまな方法を試しましたが、それでもうまくいきません。これが私のコードです:

//routes.php
Route::get('create', function() {

    $rules = array(
        'username' => 'required',
        'password' => 'required',
    );

    $input = Input::json();
    //var_dump($input); //outputs std obj with correct inputs
    $validation = Validator::make($input, $rules);
    if ($validation->fails()) { //throws exeption "Call to a member function to_array() on a non-object"
        return Response::json($validation->errors->all());
    }

}

Angularリソースを使用してデータを投稿しています...しかし、常に「非オブジェクトでメンバー関数to_array()を呼び出す」というエラーがスローされます...正しくフォーマットできないため、Angularコードを貼り付けることができませんそしてstackoverflowは私がそれをすることを可能にしません。

4

2 に答える 2

6

これは、input :: json()がオブジェクトを返し、検証メソッドが配列または雄弁なオブジェクトのいずれかを予期しているためです。できることは、オブジェクトを配列に変換することです。

$input = Input::json();
$input_array = (array)$input;

$validation = Validator::make($input_array, $rules);

更新しました:

@Ryanと話し合った後、問題は検証によるものではないことに気付きましたが、応答では、応答:: eloquent()が雄弁なオブジェクトではなく配列で渡されました。

于 2013-01-26T06:37:53.653 に答える
0

[少なくとも]Laravel5.3以降、投稿された@Raftalksの回答に-> all()を追加する必要があります。これは、すべてのエラーを含む例外(422)を1行で自動的にスローする簡単な方法です。

use Validator;
use Input;

... other stuff

Validator::make((array)Input::json()->all(), ["rule"=>"filter"])->validate();
于 2016-09-19T20:00:36.727 に答える