gpt4 book ai didi

php - Laravel 抛出一个自定义的 ValidationException

转载 作者:行者123 更新时间:2023-12-05 04:00:13 28 4
gpt4 key购买 nike

我正在尝试抛出自定义异常。该项目是一个使用 Google Places API 的 API,如果结果的状态为 ZERO RESULTS,我需要抛出验证异常。这是因为存储的数据有误。

为了更清楚这一点。注册用户修改他的个人资料,其中包括地址、邮政编码等。然后我们有一个 get 方法,我们在其中查询地点 API,这是为了获取纬度和经度并将其添加到配置文件模型中。

if (strcmp($status, 'ZERO_RESULTS') == 0 || strcmp($status, 'INVALID_REQUEST') == 0) {
$error = ValidationException::withMessages([
"one_thing" => ["Validation Message #1"], "another_thing" => ['Validation Message #2']
]);
throw $error;
}

我在 StackOverflow 上阅读了一些答案,我什至尝试了这些答案,但我只收到以下错误:

{
"errors": [
{
"status": 500,
"code": 1,
"source": {
"pointer": "ErrorException line 73 in /Users/jacobotapia/Documents/Espora/one-mind-backend/vendor/sfelix-martins/json-exception-handler/src/ValidationHandler.php"
},
"title": "errorexception",
"detail": "Undefined index: one_thing"
}
]
}

我还想指出,所有过程都发生在 GET 方法期间。

我唯一想要的是返回一个错误,指出我们无法从 google places API 获得任何结果。这是为了告诉客户用户在应用程序中注册的个人资料数据是错误的。

我做错了什么?

最佳答案

如果您有字段名称“one_thing”和“another_thing”,您可能想尝试一下

$error = Illuminate\Validation\ValidationException::withMessages([
"one_thing" => ["Validation Message #1"],
"another_thing" => ['Validation Message #2']
]);

throw $error;

检查 withMessages() 方法 definition

 public static function withMessages(array $messages)
{
return new static(tap(ValidatorFacade::make([], []), function ($validator) use ($messages) {
foreach ($messages as $key => $value) {
foreach (Arr::wrap($value) as $message) {
$validator->errors()->add($key, $message);
}
}
}));
}

键被视为字段名称,因此您将通过的 $errors 将与相应的字段相关。

基本都这样​​

$error = \Illuminate\Validation\ValidationException::withMessages([
'field_name_1' => ['Validation Message for field name 1'],
'field_name_2' => ['Validation Message for field name 2'],
'field_name_3' => ['Validation Message for field name 3'],
]);
throw $error;

试试这个

表单代码是

<form action="{{ route('test-validation') }}" method="POST">
@csrf
<input type="text" name="test" value="" />
@if( $errors->has('test') )
@foreach( $errors->get('test') as $err )
{{ $err }}
@endforeach
@endif
<input type="submit" name="submit" value="Submit" />
</form>

在你的 routes/web.php 中

use Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\Request;
Route::post('test-validation', function(Request $request){

$fields = array('test' => $request->input('test'));
$rules = array('test' => 'required|min:5');

$validator = Validator::make($fields, $rules); // Empty data and rules fields
$validator->errors()->add('test', 'This is the error message for test field');
throw new ValidationException($validator);

redirect()->withErrors($validator);
})->name('test-validation');

使用此代码,您应该能够正确获取错误。

关于php - Laravel 抛出一个自定义的 ValidationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com