在Laravel中验证Input :: json()

时间:2013-01-26 05:43:13

标签: angularjs laravel angular-resource

验证不适用于Input :: json。我尝试过使用json_decode /使用数组的不同方法,但仍然没有运气。这是我的代码:

//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 Resource发布数据...但它总是会抛出错误“在非对象上调用成员函数to_array()”...我不能粘贴我的角度代码,因为我不能格式正确,stackoverflow不允许我这样做。

2 个答案:

答案 0 :(得分:6)

这是因为在input :: json()中返回一个对象,验证方法需要数组或eloquent对象。你可以做的是将对象转换为数组。

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

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

更新:

在与@Ryan讨论之后,我注意到问题不是来自验证,而是在响应:: eloquent()中传递了一个数组而不是一个雄辩的对象。

答案 1 :(得分:0)

至于[至少] Laravel 5.3,您需要将@> all()添加到@Raftalks发布的答案中。这是一个简短的方法,可以在一行中自动抛出异常(422),包含所有错误:

use Validator;
use Input;

... other stuff

Validator::make((array)Input::json()->all(), ["rule"=>"filter"])->validate();