我正在使用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();
}
}
它总是成功验证
答案 0 :(得分:1)
而不是skipOnError
您需要将skipOnEmpty
设置为false
,否则空属性不会触发验证。
skipOnError
为true
,表示如果一个规则中的验证错误,则会跳过此属性的其余规则。