Laravel 自定义校验怎么灵活的处理

经常会遇到意想不到的校验 比如 怎么校验结束时间 大于开始时间 或者 后面字段需要根据前面一个字段的结果 进行处理 在就是比较麻烦的手机号校验 等一些laravel 本身没有的校验方式。
下面提供两种自定义添加自己的校验规则:

  1. 方式一:就是使用 Validator::extend
    Validator::extend('poly_exists', function ($attribute, $value, $parameters, $validator) {
           //处理逻辑
           $attribute, //属性
           $value, //值
           $parameters,//额外的参数 
           $validator,//校验类实例
    });

    这样需要在AppServiceProvider 里面注册 ,如果自定义的比较多 这样显然不是很优雅,下面提供比较优雅的处理方式:

// validate 是一个校验类 demo 是具体的校验方法
Validator::extend('poly_exists', 'Validate@demo');
  1. 如果想要根据灵活复杂的校验方式的话,下面根据laravel 自己的校验方式 去实现

    • 首先需要创建一个校验服务 在app/Validators 创建 Validation.php 需要继承Validator核心类
      
      namespace App\Validators;
      use App\Traits\MyValidation;
      use Illuminate\Validation\Validator;
      class Validation extends Validator
      {
      use MyValidation;

    }

  • 创建一个具 实现 trait MyValidation

    namespace App\Traits;
    
    trait MyValidation{
    
        //自定义校验
        public function validateDemoTest($attribute, $value, $parameters)
        {
            if ($value == 'test') {
                return false;
            }
            return true;
        }
        //自定义提示信息
        protected function replaceDemoTest($message, $attribute, $rule, $parameters)\
        {\
          return str_replace([':demo_test'], $parameters, $message);\
        }
    
    }
  • 最后就是注册这个服务

    Validator::resolver(function ($translator, $data, $rules, $messages) {
            return new Validation($translator, $data, $rules, $messages);
        });
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!