【问题标题】:Zend Framework addErrorMessage issueZend 框架 addErrorMessage 问题
【发布时间】:2015-01-11 20:40:13
【问题描述】:

我不确定我是否正确地遵循它。我正在尝试将自定义错误消息设置为 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>';
    ?>

问题是错误未显示。我哪里错了?

【问题讨论】:

    标签: php forms zend-framework frameworks


    【解决方案1】:

    你有 var_dump()ed 你的$this-&gt;form-&gt;getMessages() 吗?

    您的错误似乎与字段无关 - 因此未显示在您的循环中。顺便说一句,您的 FormErrors 装饰器应该默认在表单字段旁边呈现与字段相关的错误。

    【讨论】:

    • 它返回一个空数组。 array (size=0) empty
    • 另外,当我做$frmRegister -&gt; addError('error') ; 时,它给了我这个数组array (size=1) 0 =&gt; string 'error' (length=5)
    • 好的,最后我能够添加错误并使用if ($result['status'] == 0) { // Errors! We show the same page $this -&gt; view -&gt; registerError = $result['statusmsg']; $frmRegister -&gt; getElement('email') -&gt; setErrors(array($result['statusmsg'])); $frmRegister-&gt;markAsError() ; $this -&gt; view -&gt; form = $frmRegister; } 在视图上显示它但是,这不是我想要的。如果 Model 给出$result['statusmsg'],那么视图上应该只显示错误消息。那里不应该显示表单元素名称。
    【解决方案2】:

    经过一番搜索,我能够通过调整代码得到结果

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

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2012-04-04
      相关资源
      最近更新 更多