【问题标题】:Yii2 Custom Standalone ValidationYii2 自定义独立验证
【发布时间】:2015-09-17 19:57:47
【问题描述】:

好的,我相信我会有很多自定义验证,所以我决定按照Yii Standalone Validation Doc 创建一个独立的验证类。

这个特定的验证器是为了确保 company_name 或 name 被填写,所以要么是必需的。

我已经在 app\components\validators\BothRequired.php 中创建了类

<?php
namespace app\components\validators;
use Yii;
use yii\validators\Validator;

class BothRequired extends Validator
{
    public function validateAttribute($model, $attribute)
    {
       //validation code here
    }
}

这是模型

public function rules()
{
    return [
        ['company_name', BothRequired::className(), 'skipOnEmpty' => false, ],
    ];
}

但是,此验证需要将一些参数传递给此示例中的验证,我需要发送需要检查的第二个属性。我似乎无法弄清楚如何做到这一点,如果我在模型本身中创建验证规则,那么我可以传递 $params 但我不知道如何传递给这个独立类。

另外一点,对我来说更好的是,如果我可以有一个包含所有自定义验证器的类,而不是每个验证器一个文件。

有什么想法吗?

问候

【问题讨论】:

  • 我的猜测是,如果你在验证器类上有属性,那么你可以通过在规则中发送'attribute' =&gt; &lt;value&gt; 来填充它们(比如'skipOnEmpty',我敢打赌它是@ 的一个属性987654326@。这似乎是 Yii 会做的事情。
  • 我尝试过传递各种变量,'params','other'。首先它抱怨它不是一个属性,然后如果我将它设置为类中的公共属性,则不会发生任何其他事情
  • 好的,谢谢,你把我推向了正确的方向,我会添加答案

标签: php validation yii2


【解决方案1】:

好的,

在@gandaliter 的帮助下,我找到了答案

验证器类

namespace app\components\validators;
use Yii;
use yii\validators\Validator;

class BothRequired extends Validator
{
    public $other;
    public function validateAttribute($model, $attribute)
    {
        if (empty($model->$attribute) && empty($model->{$this->other})) {
            $this->addError($model, $attribute, 'Either '.$attribute.' or '.$this->other.' is required!');
            $this->addError($model, $this->other, 'Either '.$attribute.' or '.$this->other.' is required!');
        }
    }
}

示范规则

public function rules()
{
    return [
        ['company_name', BothRequired::className(), 'other'=>'contact_name', 'skipOnEmpty' => false, ],
    ];
}

如您所见,在这种情况下,您必须声明要发送的属性为$other,然后在代码中将其用作$this-&gt;other

然后我可以验证这两个项目。

我希望这能解决问题

利亚姆

附:另一方面,我提到了......如何将所有验证器放在一个类中?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多