验证不适用于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不允许我这样做。
答案 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();