laravel - 如何在 laravel 上进行良好的验证?
问题描述
我有数据,它们看起来像这样:
{
sender_name : "Real fake sender name",
recipient_name : "Real fake recipient name",
goods: [
{
"no" : 1
"name":"Pen",
"unit": "1",
"qty":"50",
"price":"50",
"amount":"2500",
"vat_percent":"5",
"vat_sum": "125",
"total_sum": "2625"
}
]
}
我需要使用扩展验证器来验证“商品”。这是他的代码:
Validator::extend('invoiceGoods' , function($attribute, $value, $parameters, $validator) {
$rulesForGoods = [
'no' => 'integer|required',
'name' => 'string|max:64|required',
'unit' => 'required|integer',
'qty' => 'required|string',
'price' => 'required|numeric',
'amount' => 'required|numeric',
'vat_percent' => 'nullable|numeric',
'vat_sum' => 'nullable|numeric',
'total_sum' => 'required|numeric'
];
foreach ($value as $good) {
$validator = Validator::make($good , $rulesForGoods);
if ($validator->fails()) {
return false;
}
}
return true;
});
这是主要代码。
$validator = Validator::make($data , [
'goods' => 'invoiceGoods',
'sender_name' => 'string',
'recipient_name' => 'string',
]);
if ($validator->fails()) {
return response()->json([
'success' => false,
'message' => 'Validation error.',
'data' => $validator->errors()
]);
}
如果发生货物验证错误,我会得到以下答案:
但我想显示这样的错误:货物中的单位错误,没有 1。
我知道第三个参数可以传递一个带有自定义消息的数组,但是如果它应该返回 true 或 false,如何从扩展验证器返回它?
解决方案
https://laravel.com/docs/5.8/validation#custom-error-messages
$messages = [
'Validation.invoice_goods' => 'Errror message!',];
$validator = Validator::make($input, $rules, $messages);
推荐阅读
- python - 如何在不使用 bin 方法的情况下将二进制转换为十进制
- c# - 这段代码得到了一个错误,这些变量没有被分配到,我不知道为什么
- amazon-web-services - 调用 AppSync 突变的 RDS MySQL Aurora 更新
- rust - 符合人体工程学地传递一片特征对象
- python - 如何删除所有字符,包括熊猫列中某个字符及其之后的字符?
- amazon-web-services - 使用 Jenkins、S3 存储桶和 Codedeploy for Java 应用程序(jar/war 文件)创建 AWS Codepipeline
- hangfire - 为什么hangfire触发多次
- c# - Avalonia UI 中的 DefaultStyleKeyProperty.OverrideMetadata?
- python - 有没有办法在 django 中显示用户的会话并将它们公开给 API?
- python - 通常如何为相同类型的参数添加类型注释?