我正在爲表單設置單個錯誤消息,但仍然驗證每個字段。在Zend表單驗證中只顯示一個錯誤
該表格是一個包含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;
}
仍然不確定這是最優雅的方式,但它適用於我的特殊情況。
自己找出來,但沒有足夠的代表發佈我的答案。 :( – Luke 2012-04-27 21:50:35