如何更改laravel中验证错误的键
Posted
技术标签:
【中文标题】如何更改laravel中验证错误的键【英文标题】:how to change the key of validation error in laravel 【发布时间】:2020-05-11 13:02:34 【问题描述】:我是 laravel 的新手,并且正在研究 api,我已经制作了一个 api,我在其中实现了验证。一切正常,但我被困在一件小事上。我想更改验证错误中的键名。例如对于“唯一”验证错误。这就是现在显示的内容
我想用“消息”(文本)重命名“电子邮件”(文本)键
我在Illumination/support/validation.php中尝试了很多东西
messagebag.php 文件,但如果它发生更改,则会显示“数据未定义”的错误。
我关注的链接是
https://stillat.com/blog/2018/04/21/laravel-5-message-bags-adding-messages-to-the-message-bag-with-add
https://laracasts.com/discuss/channels/laravel/custom-validation-message-for-array-using-different-key?page=0
Override laravel validation message
这是验证码
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email|unique:users',
'fcm_token' => 'required',
'password' => 'required',
'c_password' => 'required|same:password'
]);
【问题讨论】:
您应该添加至少一个您尝试过的代码,以便人们可以在该代码上为您提供帮助,您的问题似乎是在让人们猜测您的代码和设置,并为您编写完整的代码。 为什么你“需要”这个?如果您有超过 1 个要验证的字段,它将无法正常工作。 @Qirel 我想重命名响应中的键。我不想验证两个字段。 @Dilek 如果您不清楚我的问题,请告诉我。我不要求任何脚本。我在问如何做到这一点。我在提供的链接中提到并给出的相同文件中尝试了相同的代码。我想用“消息”(文本)重命名“电子邮件”(文本)键 我不明白目的,索引是无效字段的名称——你为什么需要改变它?我的观点是,如果某一点超过 1 个字段,您将无法区分哪条消息属于哪个字段。 【参考方案1】:在 Laravel 中,您可以尝试以这种方式验证您的电子邮件:
'email'=>'required|email'
【讨论】:
"我想用 "message" 替换 "email" 键" 如何将email
更改为 message
?
@kerbholz 编辑的问题我想用“消息”(文本)重命名“电子邮件”(文本)键
@dev:我知道,我就是这么说的。 Netwons 代码与此无关
@kerbholz 是的,你有什么想法吗?【参考方案2】:
您可以手动循环错误 MessageBag 并构造响应以替换键
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|email|unique:users',
'fcm_token' => 'required',
'password' => 'required',
'c_password' => 'required|same:password'
]);
$errors = [];
foreach ($validator->errors()->messages() as $key => $value)
if($key == 'email')
$key = 'message';
$errors[$key] = is_array($value) ? implode(',', $value) : $value;
//implode is for when you have multiple errors for a same key
//like email should valid as well as unique
$result = array("status" => count($errors)?0:1, 'data'=>$errors);
return $result;
【讨论】:
当电子邮件字段为空时,程序无法访问该方法。它直接从验证异常中显示。我已经尝试过了。 哦,这意味着验证正在其他地方运行,但很难猜测可用信息的位置【参考方案3】:在资源中 - lang - en (或任何语言) - validation.php
将此代码放在底部:
'attributes' => [
'email' => 'The Email',
],
【讨论】:
【参考方案4】:如果我能很好地理解问题。这将帮助您:
a https://laravel.com/docs/7.x/validation#rule-unique
在你的情况下:
'email' => 'required|email|unique:users,message'
唯一:表、列、除外、idColumn
希望对你有帮助。
【讨论】:
【参考方案5】:为了改变某个字段的错误信息的key,你可以将这个特定字段的验证从请求转移到控制器(或服务)。这样你就可以用任何你想要的名字抛出错误。
例如:
if (#your validation of the field failed#)
throw ValidationException::withMessages(['your_key' => 'your message']);
别忘了这一行:
use Illuminate\Validation\ValidationException;
现在的错误如下所示:
"message": "The given data was invalid.",
"errors":
"your_key": [
"your message"
]
【讨论】:
以上是关于如何更改laravel中验证错误的键的主要内容,如果未能解决你的问题,请参考以下文章