资讯专栏INFORMATION COLUMN

如何优雅的使用 laravel 的 validator

quietin / 1756人阅读

摘要:开发过程中经常会需要进行参数验证,中我们常用或者这两种方法来进行验证,但是这两种验证都不是很方便进行自定义提示信息,自定义验证规则,所以下面来介绍一种很方便的用法新建抽象类新建

web 开发过程中经常会需要进行参数验证,laravel 中我们常用 validator 或者 request 这两种方法来进行验证,但是这两种验证都不是很方便进行自定义提示信息,自定义验证规则,所以下面来介绍一种很方便的用法:

新建抽象类
 value array
     *
     * @var array
     */
    protected $data = array();

    /**
     * Validation errors
     *
     * @var array
     */
    protected $errors = array();

    /**
     * Validation rules
     *
     * @var array
     */
    protected $rules = array();

    /**
     * Validation messages
     *
     * @var array
     */
    protected $messages = array();

    /**
     * Validation codes
     *
     * @var array
     */
    protected $codes = array();

    public function __construct(array $data)
    {
        $this->data = $data;
        $this->before();
        $this->validator = Validator::make($this->data, $this->rules, $this->messages);
        $this->after();
    }

    /**
     * Set data to validate
     *
     * @return validator
     */
    public function getValidator()
    {
        return $this->validator;
    }

    /**
     * Set data to validate
     *
     * @return $this
     */
    public function with(array $data)
    {
        $this->data = $data;
        $this->before();
        $this->validator = $this->validator->make($this->data, $this->rules, $this->messages);
        $this->after();
        return $this;
    }

    /**
     * Validation passes or fails
     *
     * @return boolean
     */
    public function passes()
    {
        if ($this->validator->fails()) {
            $this->errors = $this->validator->messages();

            return false;
        }

        return true;
    }

    /**
     * Return errors, if any
     *
     * @return array
     */
    public function errors()
    {
        return $this->errors;
    }

    /**
     * Return errors codes, if any
     *
     * @return array
     */
    public function getCodes()
    {
        return $this->codes;
    }

    /**
     * getRules
     *
     * @return array
     */
    public function getRules()
    {
        return $this->rules;
    }

    /**
     * getData
     *
     * @return array
     */
    public function getData()
    {
        return $this->data;
    }

    /**
     * getErrors
     *
     * @return array
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * getMessages
     *
     * @return array
     */
    public function getMessages()
    {
        return $this->messages;
    }

    /**
     * setRule
     *
     * @param string $key
     * @param string $value
     *
     * @return $this
     */
    public function setRule($key, $value)
    {
        $this->rules[$key] = $value;

        return $this;
    }

    /**
     * emptyRules
     *
     * @return $this
     */
    public function emptyRules()
    {
        $this->rules = array();

        return $this;
    }

    /**
     * sometimes
     *
     * @param  string       $attribute
     * @param  string|array $rules
     * @param  callable     $callback
     *
     * @return $this
     */
    public function sometimes($attribute, $rules, callable $callback)
    {
        $this->validator->sometimes($attribute, $rules, $callback);

        return $this;
    }

    /**
     * resolver
     *
     * @param  Closure $resolver
     *
     * @return $this
     */
    public function resolver(Closure $resolver)
    {
        Validator::resolver($resolver);

        return $this;
    }

    /**
     * replacer
     *
     * @param  Closure $resolver
     *
     * @return $this
     */
    public function replacer($replace, Closure $resolver)
    {
        Validator::replacer($replace, $resolver);

        return $this;
    }

    /**
     * extendImplicit
     *
     * @param  Closure $resolver
     *
     * @return $this
     */
    public function extendImplicit($extendImplicit, Closure $resolver)
    {
        Validator::extendImplicit($extendImplicit, $resolver);

        return $this;
    }

    /**
     * extend
     *
     * @param  string          $rule
     * @param  Closure|string $extension
     * @param  string          $message
     *
     * @return $this
     */
    public function extend($rule, $extension, $message = null)
    {
        Validator::extend($rule, $extension, $message);

        return $this;
    }

    /**
     * before (extend(),resolver())
     *
     * @return $this
     */
    public function before()
    {
    }

    /**
     * after(sometimes())
     *
     * @return $this
     */
    public function after()
    {
    }
}
新建中间件
isMethod("POST")) {
            $type = $request->segment(1);
            if ($validator) {
                $validator = $this->namespace . "" . studly_case($type) . "" . studly_case($validator) . "Validator";
                $validator = new $validator($request->all());

                if (!$validator->passes()) {
                    if ($request->isAjax()) {
                        return $validator->errors()->first();
                    } else {
                        return redirect()->back()
                        ->withErrors($validator->getValidator())
                        ->withInput();
                    }
                }
            }
        }
        return $next($request);
    }
}
新建 TestTestValidator
 ["required", "test", "min:1"],
    );

    /**
     * Validation messages
     *
     * @var Array
     */
    protected $messages = array(
        "name.required" => "必填",
        "name.min" => "最少1个字符",
        "name.test" => "测试",
    );

    /**
     * 自定义验证规则或者扩展Validator类
     */
    public function before()
    {
        $this->extend("test", function ($attribute, $value, $parameters) {
            return bool;
        });
    }
}
路由中如何使用
Route::post("/", ["middleware" => ["valiAdmin:Test"], "uses" => "IndexController@test"]);

实现了验证和控制器的分离,验证更加方便、快捷
具体使用可以自行配置优化~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29621.html

相关文章

  • Laravel 学习笔记之 request validation

    摘要:对于这样嵌套的,使用来校验对象间关系很重要,可以看做是进入核心业务逻辑前的初步校验。。当然最后写表时还有,避免坏数据进入。,总之,在写程序时,很重要,需要去写,包括和。。。 在用laravel写api时,当前端传进来的request是POST/PUT/PATH等method时,那需要做request validation,尽管对于前后端分离程序,前端程序Angular/Vue已经做了v...

    imingyu 评论0 收藏0
  • Laravel优雅验证日期需要大于今天

    摘要:我们有时会碰到一个场景,比如买车票,需要进行查询车票剩余,这时候需要一个日期范围,开始日期必须大于等于今天,结束日期必须大于等于开始日期。通过增加一个额外的字段,然后通过这个字段限制范围。测试发现实际并不生效。 我们有时会碰到一个场景,比如买车票,需要进行查询车票剩余,这时候需要一个日期范围,开始日期必须大于等于今天,结束日期必须大于等于开始日期。 Version Laravel 5...

    summerpxy 评论0 收藏0
  • Laravel 用户多字段认证优雅解决方案

    摘要:弊端显而易见,如果另一个不是就抓瞎了,下面是另一种通用的解决方案在中重写方法假设字段是假设字段是假设字段是可以看到虽然能解决问题,但是显然有悖于的优雅风格,卖了这么多关子,下面跟大家分享一下我的解决方案。 解决方案: 登录字段不超过两个的(简单的解决方案) 登录字段大于或等于三个的(相对复杂一些) 登录字段不超过两个的 我在网上看到一种相对简单解决方案,但是不能解决所有两个字段的验...

    jk_v1 评论0 收藏0
  • 做好自动化 API 测试(1)- 从一个好用 Json Validator 开始

    摘要:就目前我的面试经验而言,绝大部分项目都没有引入自动化测试,测试基本都是依靠开发人员的自测以及测试人员黑盒测试。本文不探讨黑盒测试,仅仅发表一点我对自动化测试的想法。缘起早在两年多以前,就在思考如何做的测试,保证返回的结果与预期的一致。 目前,前后端分离的开发模式越来越受到大家的青睐,前端与后端的职责也更加清晰,后端通过 API 提供数据,前端通过 API 获取数据,展示页面,前端有更大...

    RancherLabs 评论0 收藏0
  • Laravel 和 Spring Boot 两个框架比较创业篇(一:开发效率)

    摘要:小红要以最低成本最快速度推出版本,投放市场,收集反馈,持续迭代。总结在技能掌握充足的情况下,个人感觉开发效率要略高于。 我个人是比较不喜欢去正儿八经的比较两个框架的,这样没有意义,不过欲善其事先利其器! 技术是相通的,但是在某个特定的领域的某个阶段肯定有相对最适合的一个工具! 这里比较不是从技术角度比较,而是从公司技术选型考虑的,特别是初创的互联网创业公司。没办法,谁让互联网公司离不开...

    tinna 评论0 收藏0

发表评论

0条评论

quietin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<