【发布时间】:2015-04-05 20:45:06
【问题描述】:
我在 Yii 中有一个模型,其中包含另一个模型类型的数组。然后,我尝试验证表单中没有填写重复的电子邮件,您可以在该表单中同时填写 n 个人。
我目前的方法是触发包含所有参赛者的“外部”模型的自定义验证,但是,该模型在视图中不可访问,只有参赛者数组,如果我随后触发错误“外部”模型,它不会显示给用户。因此,我想为违反规则的第一个进入者触发它,但我该怎么做呢?
我的代码尝试这样做,到目前为止看起来像这样:
/*
* Custom validation rule to hinder the same e-mail being used twice.
*/
public function noRepeatingEmails($attribute, $params)
{
if (!isset($attribute)) return;
$emails = array();
foreach($this->$attribute as $user)
{
if (isset($user) && strlen(trim($user->email)) != 0)
{
$emailToAdd = strtolower(trim($user->email));
if (in_array($emailToAdd, $emails))
{
$this->addError($user, '<my error message>');
return;
}
else
{
$emails[] = $emailToAdd;
}
}
}
}
但这只会导致代码 500 错误:
Illegal offset type
我认为这是因为它在我的模型中寻找属性“user”,而不是向“$user”对象添加错误。
我怎样才能最好地做到这一点?
我有 .NET 背景,所以我可能在这里加载错误。
【问题讨论】:
-
检查 yii
unique验证规则。array('email', 'unique', 'message'=>'{attribute} already exist.') -
@harmed:我不是要针对数据库模型进行验证,而是在保存之前验证当前模型。用户可以一次注册多个参赛者,每个参赛者都有自己的电子邮件,这就是我要验证的内容,并显示验证错误消息。
-
“保存前”并不完全正确。在将数据保存到用户会话并继续下一步之前。保存到数据库发生在后面的步骤。
标签: php validation yii