php resf验证,关于php:验证请求时Laravel中的rest api

我目前正在尝试如何用Laravel构建一个RESTfulAPI,我目前正在创建一个新用户。这只是一个测试,在尝试使用Laravel中的验证来验证请求时,我得到了一些结果;结果如下:

9689b0ca26aab50f796eec181b84c6ac.png

我一直试图用以下代码创建一个新的代码:

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'))

]);

}

}

但是我不知道如何返回验证中的错误。但是当我尝试使用validation->fails()做if时,它一直在给我图像中显示的HTML。有没有一种方法可以得到JSON格式的验证?

您可能应该返回错误(这是Illuminate\Support\MessageBag的一个实例)并对其进行编码。MessageBag实例允许您直接将其转换为JSON表示。

$errors = $validation->errors();

return $errors->toJson();

现在不要自吹自擂,但我最近为Laravel开发了一个RESTfulAPI包,它为您完成了所有这些工作,您需要做的只是抛出一个简单的异常。有关返回错误的信息,请参阅我的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."]

}

}

我做完这件事后,我再试试你的包裹。问题是它在我的终端中将if($validation->fails())返回到html,这样你最终会返回一些html,然后它就不会读取下一行代码。我关于它发生了什么的理论……

铸造它。我必须指定内容类型。我在这里找到了答案stackoverflow.com/questions/7172784/…

你应该按喇叭。野狗现在是一个很受欢迎的包裹。所以谢谢你的努力!

这些代码将帮助您,为我工作。

$response = array('response' => '', 'success'=>false);

$validator = Validator::make($request->all(), $rules);

if ($validator->fails()) {

$response['response'] = $validator->messages();

}else{

//process the request

}

return $response;

这个答案值得更多的赞扬。我尝试过所有的解决方案,这一个至少在Laravel5.2中给了我正确的信息。

谢谢@glenplas

Laravel提供了一个现成的验证方法,您可以从控制器调用该方法。

如果检查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响应。

有关Laravel 5.5及更高版本,请参阅文档:Ajax请求和验证

tl;dr:验证失败时,返回带有422的JSON响应以及验证错误消息。在响应对象中查找这些验证错误花费了我一点时间,因此要查看错误消息(如果您使用的是AXIOS),请在浏览器控制台中尝试此操作:

axios.post('/api/your-route-here')

.then(response => {

console.log(response.data);

}).catch(error => {

console.log(error.response.data.errors)

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值