2016-07-24 14:30:18 8825次浏览 9条回答 0 悬赏 10 金钱

Mode::rules();

public function rules()
{
     [['username', 'password'], 'required'],
     ['age', 'required'],
     // ......
 
}

username 为空立即返回error ,不去验证password和age。同理age如果为空,也不会去验证其他字段

不知道yii2这块有没有这种配置?

补充于 2016-07-25 21:29

感谢楼上all同学的回答,我这边重写了Model类解决了,另外我要这样的验证是专给api使用。

  • 回答于 2016-07-24 19:31 举报

    之前看错问题了。。。
    暂时删掉了之前的答案

  • 回答于 2016-07-24 22:21 举报

    那你的自己写判断规则来替换自带的rules规则

    1 条回复
    回复于 2016-07-25 21:32 回复

    或者不用rules

    觉得很赞
  • 回答于 2016-07-25 10:14 举报

    把不想验证的字段写到safe里。

    1 条回复
    回复于 2016-07-25 21:31 回复

    我是需要验证的,只是想要发生错误就立即return error

  • 回答于 2016-07-25 11:00 举报

    已经有很多人问这个问题了,例如:如何获取第一条错误信息(注意不是某个字段的错误信息),这个函数yii2是没有提供的,只能自己扩展,然而扩展也是从错误数组中提取,为什么那?yii2验证是循环验证的!它要全部验证,并不会验证某个字段不合法就跳出,所以楼主算了吧还是,楼主是不是tp用多了? 😄

    1 条回复
    回复于 2016-07-25 21:30 回复

    tp我还没注意,不过页没用过它的验证器,好像没有提供这块。

  • 回答于 2016-07-27 18:15 举报

    如果不嫌麻烦可以在每一个验证后面加上when,代码可以这样写

    [['email_attribute'], 'email', 'when' => function ($model) {
        return !$model->hasErrors();
    }],
    

    一般针对需要复杂验证(如:访问DB),简单的验证就算了吧

    1 条回复
    回复于 2019-10-31 11:19 回复

    您好,我想验证,当post_meta_id值为2的时候,customer_name非空,但是这么写,当post_meta_id为其他值,也会提示customer_name不能为空,麻烦问一下我应该怎么写

    [['customer_name'], 'required', 'when' => function ($model, $attribute) {

                return $model->post_meta_id == 2;
            }],
    
    觉得很赞
  • 回答于 2018-07-12 16:20 举报
    /**
     * 由于 Yii 是循环验证的,作为API时,当一个错误出现时,应该终止验证。
     * !$this->hasErrors() 在已有错误时,终止验证,可以调高效率(特别是下面的SQL查询)。
     */
    if (!$this->hasErrors() && !Common::isPhone($this->phone)) {
        $this->addError('phone', '格式错误');
    }
    
    觉得很赞
  • 回答于 2019-06-12 15:50 举报

    你的方案呢?

  • 回答于 2019-09-06 11:53 举报

    比如我的解决办法是,model和AR模型都需要用到这个功能,那么我在common/traits目录下新建了个ModelTrait.php文件
    内容是
    `<?php

    namespace common\traits;

    trait ModelTrait
    {

    /**
     * 获取验证的第一条错误信息
     */
    public function fail($delferror = '')
    {
        $error = $this->getErrors();
        if ($error) {
            reset($error);
            return current($error)[0];
        }
        return $delferror;
    }
    

    } 然后在model或ar使用 <?php

    namespace common\base;

    use common\traits\ModelTrait;

    class BaseAr extends \yii\db\ActiveRecord
    {

    use ModelTrait;
    

    }`

    最后的效果是
    0201.png

    1 条回复
    回复于 2019-09-06 11:54 回复

    这论坛插入代码功能太菜了,建议换个编辑器

  • 回答于 2020-04-26 10:24 举报

    skipOnError

您需要登录后才可以回答。登录 | 立即注册
sturn
主管

sturn

注册时间:2012-01-29
最后登录:2020-04-02
在线时长:50小时6分
  • 粉丝5
  • 金钱405
  • 威望0
  • 积分905

热门问题