gpt4 book ai didi

laravel - 即使提供了自定义消息,验证失败也会返回默认错误消息

转载 作者:行者123 更新时间:2023-12-04 09:57:55 24 4
gpt4 key购买 nike

我没有得到我期望的答复。

这是“位置” Web服务请求的 Controller 代码:

<?php
namespace App\Http\Controllers;

use App\Location;
use Illuminate\Http\Request;


class LocationController extends Controller
{


/**
* Action method to add a location with the supplied Data
*
* @param \Illuminate\Http\Request $p_oRequest Request
*
* @return JSON
*/
public function add(Request $p_oRequest)
{

try {

$p_oRequest->validate(
array(
'name' => 'required|alpha_num',
'user_id' => 'required|integer',
),
array(
'name.required' => 'Name is required',
'name.string' => 'Name must be alphanumeric',
'user_id.required' => 'Curator User Id is required',
'user_id.required' => 'Curator User Id must be an integer',
)
);

} catch (\Exception $ex) {

$arrResponse = array(
'result' => 0,
'reason' => $ex->getMessage(),
'data' => array(),
'statusCode' => 404
);

} finally {

return response()->json($arrResponse);

}

}

}

该请求是 http://mydomain/index.php/api/v1/location/add?name=@!^

我期望的响应原因是:{“结果”:0,“原因”:“名称必须为字母数字”,“数据”:[],“statusCode”:404}

我得到的实际响应是:{“result”:0,“reason”:“给定的数据无效。”,“data”:[],“statusCode”:404}

请帮忙。这使我烦恼。

最佳答案

我终于发现了为什么这行不通。这不是实现代码或Laravel中的错误的问题,而是以下两者之一:(i)。编写好的PHP代码来处理不言而喻的结果,显然我没有这么做; (ii)。 Laravel中关于如何实际使用验证错误响应的文档不足。随便你吧。
Laravel的验证会抛出Illuminate\Validation\ValidationError。信不信由你,这实际上将错误消息默认为“给定数据无效。”,因此当您捕获\Exception并检索其$ e-> getMessage()时,此默认错误消息就是您(正确)的错误消息得到。
您需要做的是捕获\Illuminate\Validation\ValidationError-我本来应该做的,du! -然后使用其方法来帮助您从中提取错误消息。
这是我想出的解决方案:

<?php
namespace App\Http\Controllers;

use App\Location;
use Illuminate\Http\Request;


class LocationController extends Controller
{

/**
* Action method to add a location with the supplied Data
*
* @param \Illuminate\Http\Request $p_oRequest Request
*
* @return JSON
*/
public function add(Request $p_oRequest)
{
try {

$arrValid = array(
'name' => 'required|alpha_num',
'user_id' => 'required|integer',
);
$p_oRequest->validate(
$arrValid,
array(
'name.required' => 'Name is missing',
'name.alpha_num' => 'Name must be alphanumeric',
'user_id.required' => 'User Id is missing',
'user_id.integer' => 'User Id must be an integer',
)
);

} catch (\Illuminate\Validation\ValidationException $e ) {

/**
* Validation failed
* Tell the end-user why
*/
$arrError = $e->errors(); // Useful method - thank you Laravel
/**
* Compile a string of error-messages
*/
foreach ($arrValid as $key=>$value ) {
$arrImplode[] = implode( ', ', $arrError[$key] );
}
$message = implode(', ', $arrImplode);
/**
* Populate the respose array for the JSON
*/
$arrResponse = array(
'result' => 0,
'reason' => $message,
'data' => array(),
'statusCode' => $e->status,
);

} catch (\Exception $ex) {

$arrResponse = array(
'result' => 0,
'reason' => $ex->getMessage(),
'data' => array(),
'statusCode' => 404
);

} finally {

return response()->json($arrResponse);

}

}

}
因此,确实,Laravel提供了正确的响应,并且做到了锡盒侧面所说的,但是我没有正确地应用它。无论如何,为了对我和Laravel-sea的其他丢失PHP的航海者 future 有所帮助,我提供了解决方案。
另外,还要感谢Marcin指出我的错误代码,即使我已经实现了上述解决方案,也会造成问题。

关于laravel - 即使提供了自定义消息,验证失败也会返回默认错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257191/

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