Zend Framework проблема addErrorMessage

0

Я не уверен, правильно ли я соблюдаю его. Я пытаюсь установить собственное сообщение об ошибке в форму 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>';
    ?>

Проблема в том, что ошибка не отображается. Где я ошибаюсь?

Теги:
forms
frameworks
zend-framework

2 ответа

0

После некоторого поиска я смог получить результат, изменив код

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>';
    }
0

У вас есть var_dump() ed $this->form->getMessages()?

Похоже, что ваши ошибки не связаны с полями, поэтому не отображаются в вашем цикле. Кстати, ваш декоратор FormErrors должен по умолчанию создавать связанные с поля ошибки рядом с полями формы.

  • 0
    Возвращает нулевой массив. array (size=0) empty
  • 0
    Также, когда я делаю $frmRegister -> addError('error') ; это дает мне этот массив array (size=1) 0 => string 'error' (length=5)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню