美文网首页
laravel 5.x 自定义数据校验

laravel 5.x 自定义数据校验

作者: yzfang | 来源:发表于2018-08-15 12:19 被阅读0次

    Laravel本身内置了许多好用的数据校验规则,拿来即用,但这远远不够,我们需要自定义自己的验证规则是必要的。

    简单验证

    配置

    App\Providers\AppServiceProvider.php

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use App\Validators\Validation;
    use Illuminate\Support\Facades\Validator;
    
    class AppServiceProvider extends ServiceProvider
    {
    
        public function boot()
        {
            Validator::resolver(function ($translator, $data, $rules, $messages) {
                return new Validation($translator, $data, $rules, $messages);
            });
        }
    }
    
    

    自定义验证的类添加

    App\Validators\Validation.php

    <?php
    
    namespace App\Validators;
    
    use App\Validators\Demo\DemoValidation;
    use Illuminate\Validation\Validator;
    
    class Validation extends Validator
    {
        /**
         * 自定义校验:Demo
         */
        use DemoValidation;
    }
    
    

    App\Validators\DemoValidation.php

    请注意验证的命名方式,必须validate{Name}, 如validateDemoTest
    
    <?php
    
    namespace App\Validators\Demo;
    trait DemoValidation
    {
        public function validateDemoTest($attribute, $value, $parameters)
        {
            if ($value == 'test') {
                return false;
            }
            return true;
        }
    }
    
    

    验证名称的中文配置
    resource\lang\zh-CN\validation.php

        'demo_test' => ':attribute 测试验证'
    

    自定义验证的使用

    自定义验证使用方式和我们普通的验证一样的,只需要在验证规则里面加上我们自定义的即可,
    使用名称如validateDemoTest,只需要填写demo_test即可。

    <?php
    
    namespace App\Validators\Home;
    
    use Prettus\Validator\LaravelValidator;
    
    class LockValidator extends LaravelValidator
    {
        const RULE_DEMO_TEST = 'demo_test';
    
        protected $rules = [
            self::RULE_DEMO_TEST => [
                'A' => 'required|integer|demo_test',
                'B' => 'integer',
            ]
        ];
        
        protected $messages = [
        ];
        
        protected $attributes = [
        
        ];
    }
    

    复杂验证

    除了上面所说的简单自定义验证之外,我们可能还需要验证多个字段的有效性,或是在验证里面调用我们的业务方法等等...
    我们可以$this->getValue('B'),得到其他参数的值,从而进行更复杂的校验,下面的示例主要介绍几点:

    • 获取其他字段的值 (重点),$this->getValue('community_unit_id')
    • 参数的传递及接收
    • 自定义验证提示 $this->setCustomMessages(['demo_test' => 'A规则不符合']);
    • 其他可以自行查看所有可用的方法
    <?php
    
    namespace App\Validators\Demo;
    
    use App\Servers\DemoServer;
    
    trait DemoValidation
    {
        public function validateDemoTest($attribute, $value, $parameters)
        {
            $A = $value;
            //得到其他参数的值
            $condition['B'] = $this->getValue('B');
            
            //参数的传递方式:required|demo_test:111,222 多个参数用逗号分割,参数的获取如下:
            $paramB = $parameters[0];
            
            //调用Server层进行业务上的校验。
            DemoServer::hasXxx($condition);
            
           //复杂校验可设置对应的提示
            if ($value != 'A') {
                $this->setCustomMessages(['demo_test' => 'A规则不符合']);
                return false;
            }
             if ($value != 'B') {
                $this->setCustomMessages(['demo_test' => 'B规则不符合']);
                return false;
             }
            return true;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:laravel 5.x 自定义数据校验

          本文链接:https://www.haomeiwen.com/subject/fywibftx.html