不在Yii2联系表单中工作的自定义规则验证扩展了Model

时间:2016-12-30 10:14:48

标签: php forms validation yii2

我正在使用Yii2创建网站。有一个名为Contact Form的模型,如下所示:

class ContactForm extends Model
{
    public $name;
    public $email;
    public $subject;
    public $body;
    public $response;
    public $response2;

    public function rules()
    {
        return [
            [['name', 'email', 'subject', 'body'], 'required'],
            ['email', 'email'],
            ['response', function ($attribute, $params)
            {
                $this->addError($attribute, 'Wrong response 1');
            },  'skipOnError' => false],
            ['response2', 'validresponse2'],
        ];
    }

    public function validresponse2($attribute, $params) {
        $this->addError($attribute, 'Wrong response 2');
    }
}

有2个属性(响应和响应2)具有自定义验证。

两种自定义验证均无效。他们根本没有弹出错误信息。当我把回声" asd;死();在这些功能中,他们也没有死。

我的规则设置错了吗?我已经搜索了其他问题,但没有运气。

更新

以下是我在控制器中验证表单的方法

$model = new ContactForm();
$model->subject = "New Message";

if (isset($_POST['ContactForm'])) {
    $model->attributes = $_POST['ContactForm'];
    $model->response = "";
    if ($model->validate()) {
        echo "validated successfully";
        die();
    }
}

它总是成功验证

1 个答案:

答案 0 :(得分:1)

而不是skipOnError您需要将skipOnEmpty设置为false,否则空属性不会触发验证。

默认情况下,

skipOnErrortrue,表示如果一个规则中的验证错误,则会跳过此属性的其余规则。