Я не уверен, правильно ли я соблюдаю его. Я пытаюсь установить собственное сообщение об ошибке в форму Zend, чтобы представление могло отображать это сообщение об ошибке.
Вот мой Коллектор
public function indexAction()
{
$request = $this -> getRequest();
$frmRegister = new Application_Form_RegisterForm();
if ($request -> isPost())
{
if ($frmRegister -> isValid($request -> getPost()))
{
// Everything appears valid.
// Build the array
$data = array(
'firstname' => $request -> getPost('firstname'),
'lastname' => $request -> getPost('lastname'),
'email' => $request -> getPost('email'),
'password' => hash('SHA512', $request -> getPost('password'))
);
$result = $this -> userModel -> registerUser($data);
// $result['statusmsg'] returns an error message "The user already exists" and $result['status'] = 0
if ($result['status'] == 0)
{
$frmRegister -> addErrorMessage($result['statusmsg']) ;
$this -> view -> form = $frmRegister;
}
}
else
{
// Errors! We show the same page
$this -> view -> form = $frmRegister;
}
}
else
{
$this -> view -> form = $frmRegister;
}
}
Просмотр страницы
<?php
if(isset($this->form))
$errors = $this->form->getMessages();
if(count($errors) > 0 )
{
echo '<div class="alert alert-danger">';
foreach($errors as $field => $arrErrors)
{
foreach($arrErrors as $error )
{
echo '<li>' . $this->form->getElement($field)->getLabel() . ' - ' . $error . '</li>';
}
}
echo '</div>';
}
if(isset($this->loginError))
echo '<div class="alert alert-danger">'. $this->loginError . '</div>';
?>
Проблема в том, что ошибка не отображается. Где я ошибаюсь?
После некоторого поиска я смог получить результат, изменив код
if ($result['status'] == 0)
{
// Errors! We show the same page
$this -> view -> registerError = $result['statusmsg'];
$frmRegister ->setErrors(array($result['statusmsg']));
$frmRegister->markAsError() ;
$this -> view -> form = $frmRegister;
}
И вид изменится на
if(isset($this->form))
$errors = $this->form->getMessages();
if(count($errors) > 0 )
{
echo '<div class="alert alert-danger">';
foreach($errors as $field => $arrErrors)
{
if(is_array($arrErrors))
foreach($arrErrors as $error )
{
echo '<li>' . $this->form->getElement($field)->getLabel() . ' - ' . $error . '</li>';
}
else
{
echo $arrErrors;
}
}
echo '</div>';
}
У вас есть var_dump() ed $this->form->getMessages()
?
Похоже, что ваши ошибки не связаны с полями, поэтому не отображаются в вашем цикле. Кстати, ваш декоратор FormErrors должен по умолчанию создавать связанные с поля ошибки рядом с полями формы.
array (size=0) empty
$frmRegister -> addError('error') ;
это дает мне этот массивarray (size=1) 0 => string 'error' (length=5)