我目前正在尝试如何使用Laravel构建RESTful API,而我目前正在创建新用户.这只是一个测试,当我尝试使用Laravel中的验证来验证请求时,我得到了一些结果; 这是结果:
我一直试图通过这段代码创建一个新的:
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')) ]); } }
但后来我不知道如何在验证中返回错误.但是当我尝试使用if时,它会继续向我提供图像中显示的HTML validation->fails()
.有没有办法以JSON格式进行验证?
您应该返回错误(这是一个实例Illuminate\Support\MessageBag
)并对其进行编码.一个MessageBag
实例,您可以直接转换成JSON表示.
$errors = $validation->errors(); return $errors->toJson();
现在不要自己动手,但我最近为Laravel开发了一个RESTful API包,它可以为你完成所有这些,你需要做的就是抛出一个简单的异常.查看我的dingo/api包和返回错误的Wiki .基本上,不是返回错误,而是抛出异常.
throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create a new user.', $validation->errors());
它将由以下JSON表示.
{ "message": "Could not create a new user.", "errors": { "username": ["The username is already in use."] } }
这些代码会帮助你,为我工作.
$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提供了一种开箱即用的验证方法,您可以从Controller调用它。
如果您检查Laravel Controller
抽象类,您会发现它使用称为ValidatesRequests
abstract class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; }
因此$this->validate(Request $request, array $rules);
,只要您的控制器类扩展了控制器,就可以使用一种方法
完整的方法声明是
public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) { $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); if ($validator->fails()) { $this->formatValidationErrors($validator); } }
如果$ validator失败,则该方法将根据请求类型抛出错误,如果它是ajax(在这种情况下,您应在请求标头(Accept application/json
)中包含该方法,它将返回一个包含验证错误的JSON响应。