我希望为表单设置一条错误消息,但仍会验证每个字段。
该表格是一个包含 10 个问题的调查。他们每个人都以相同的方式验证(->setRequired(true)
)。所以基本上,我只是为了验证每个问题都有答案,如果其中一个问题没有得到回答,则会在表格顶部显示一条消息。
我尝试了几种解决方案并得到了相同的结果。我的错误已添加到表单中,而且所有单个错误也会显示。
这是我最近的一次拍摄:
public function isValid($data)
{
$errors = 0;
parent::isValid($data);
foreach ($this->getElements() as $element) {
if ($element->hasErrors()) {
$element->clearErrorMessages();
$element->setErrors(array());
$errors++;
}
}
if (count($errors) > 0) {
$this->setErrorMessages(array('Please answer all questions before proceeding.'));
return false;
}
return true;
}
任何人都可以解释为什么这不能像我预期的那样工作吗?必须有一种更优雅的方式来做到这一点。
编辑:
这就是我最终的结果。由于我的表单元素是根据一系列问题动态填充的,因此可能与大多数情况有所不同,但应该适用一般的想法。通常,您可以只计算单选元素的数量,但在我的情况下,与其循环遍历元素并检查类型,计算我的问题数组更容易。
public function isValid($data)
{
$valid_values = 0;
parent::isValid($data);
foreach ($this->getValues() as $value) {
if ($value >= 1 && $value <= 10) {
$valid_values++;
}
}
if ($valid_values <> count($this->_questions)) {
$this->setErrorMessages(array('Please answer all questions before proceeding.'));
return false;
}
return true;
}
仍然不确定这是最优雅的方式,但它适用于我的特殊情况。