1

验证不适用于 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()”……我无法粘贴我的 Angular 代码,因为我无法正确格式化它而stackoverflow不允许我这样做。

4

2 回答 2

6

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

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

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

更新:

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

于 2013-01-26T06:37:53.653 回答
0

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

use Validator;
use Input;

... other stuff

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