码迷,mamicode.com
首页 > 其他好文 > 详细

【laravel】validator required_without不起作用,自定义规则

时间:2021-04-09 12:56:58      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ESS   mamicode   数据   with   turn   tor   min   数组   eric   

required_without不起作用,自定义一个规则代替它

想实现的效果: 两个参数二选一,只存在一个返回true,同时存在或同时不存在返回false

使用方式:

$data = [
    ‘fid‘ => 1,
    ‘path‘ => ‘/全部文件/文件夹1‘
];
Validator::make($data, [
    ‘fid‘ => ‘bail|$without:path|numeric‘,
    ‘path‘ => ‘bail|$without:fid|string‘
]);

$without 是自定义规则名,$without:path 表示当 path 不存在时这条规则验证通过

App\Providers\AppServiceProvider 文件的boot方法里定义:

先在文件顶部引入:use Illuminate\Support\Facades\Validator;

Validator::extendImplicit(‘$without‘, function ($attribute, $value, $parameters, $validator) {

      // 被排除的属性是否存在,不存在返回true
      if (!isset($parameters[0])) {
          return true;
      }

      $data = $validator->attributes();  // 待验证的属性数组

      // 当前属性存在且被排除属性不存在
      if (array_key_exists($attribute, $data) && !array_key_exists($parameters[0], $data)) {
          return true;
      }

      // 当前属性不存在,但被排除属性存在
      if (!array_key_exists($attribute, $data) && array_key_exists($parameters[0], $data)) {
          return true;
      }

      $needKey = $attribute;
      $withoutKey = $parameters[0];

      return false;
    });
  • extendImplicit 方法表示即使字段不存在也要执行,用于当 fidpath 都不存在时的情况
  • $validator->attributes() 方法返回待验证的数据,键值对返回;可进入 vendor\laravel\framework\src\Illuminate\Validation\Validator.php 文件,搜索 public function 查看有哪些可用的方法。
  • $parameters[0]$without:pathpath

错误消息占位符替换:

Validator::replacer(‘$without‘, function ($message, $attribute, $rule, $parameters) {

    return str_replace(‘:withoutKey‘, $parameters[0], $message);
      
});

定义错误语言:

resources\lang\xx\validation.php 文件中,第一层数组下添加 :

‘$without‘ => ‘当 :withoutKey 不存在时 :attribute 不能为空。‘

其他:

技术图片

技术图片

技术图片

【laravel】validator required_without不起作用,自定义规则

标签:ESS   mamicode   数据   with   turn   tor   min   数组   eric   

原文地址:https://www.cnblogs.com/mflnhg/p/14632271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!