REST API in Laravel when validating the request
我目前正在尝试如何用Laravel构建一个RESTfulAPI,我目前正在创建一个新用户。这只是一个测试,在尝试使用Laravel中的验证来验证请求时,我得到了一些结果;结果如下:
我一直试图用以下代码创建一个新的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public function store() { $validation = Validator::make(Request::all(),[ 'username' => 'required|unique:users, username', 'password' => 'required', ]); if($validation->fails()){ } else{ $createUser = User::create([ 'username' => Request::get('username'), 'password' => Hash::make(Request::get('password')) ]); } } |
但是我不知道如何返回验证中的错误。但是当我尝试使用
您可能应该返回错误(这是
1 2 3 | $errors = $validation->errors(); return $errors->toJson(); |
现在不要自吹自擂,但我最近为Laravel开发了一个RESTfulAPI包,它为您完成了所有这些工作,您需要做的只是抛出一个简单的异常。有关返回错误的信息,请参阅我的dingo/api包和wiki。基本上,不返回错误,而是抛出异常。
1 | throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create a new user.', $validation->errors()); |
它将由以下JSON表示。
1 2 3 4 5 6 | { "message":"Could not create a new user.", "errors": { "username": ["The username is already in use."] } } |
这些代码将帮助您,为我工作。
1 2 3 4 5 6 7 8 | $response = array('response' => '', 'success'=>false); $validator = Validator::make($request->all(), $rules); if ($validator->fails()) { $response['response'] = $validator->messages(); }else{ //process the request } return $response; |
Laravel提供了一个现成的验证方法,您可以从控制器调用该方法。
如果检查laravel
1 2 3 4 | abstract class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; } |
因此,只要控制器类扩展控制器,就可以使用方法
完整的方法声明是
1 2 3 4 5 6 7 8 |
如果$validator失败,该方法将根据请求类型引发错误,如果它是Ajax(在这种情况下,您应该在请求头(
有关Laravel 5.5及更高版本,请参阅文档:Ajax请求和验证
tl;dr:验证失败时,返回带有422的JSON响应以及验证错误消息。在响应对象中查找这些验证错误花费了我一点时间,因此要查看错误消息(如果您使用的是AXIOS),请在浏览器控制台中尝试此操作:
1 2 3 4 5 6 |