【问题标题】:Display Exception error message in Zend Form - Zend Framework 2在 Zend 表单中显示异常错误消息 - Zend Framework 2
【发布时间】:2012-10-12 08:05:12
【问题描述】:

我想以 zend 形式显示一个由异常引发的简单异常消息。我检查数据库中是否存在重复记录,如果退出,那么我想抛出一个错误,说明数据库中已经存在具有该名称的记录。我想在 add.phtml 文件中显示在记录名称文本字段之后。

这就是我想要做的:

在我的控制器中:

public function addAction()
{
    try {
        $records->validateDuplicateRecords($recordTitle);

        if ($form->isValid()) {
            //doing all the stuff like saving data to database
        }
    } catch (\Exception $e) {
         echo $e->getMessage(); //Not sure with this part
    }
}

以及我正在检查重复记录的班级:

records.php

public function validateDuplicateRecords($recordTitle)
{
    //fetching all titles from database

   //comparing with $recordTitle using foreach and if
   //all these here in the loop works, I am giving the skeleton of my code
    foreach($records as $record)
    {
        if($record == $recordTitle) {
            throw new \Exception("Record with title '$recordTitle' already exists");
        }
        return true;
    }   
}

所以我基本上就是这样做的,我知道这个 try and catch 是如何与纯 php 的东西一起工作的,但我不知道如何在 Zend Framework 2 和 zend 表单中使用异常。如果有人对此有解决方案,如果可以共享,将很高兴。

附:我遵循了专辑模块,所以基本上我的结构与官方模块或多或少相似

编辑:add.phtml 已添加

添加.phtml

<?php
$title = "Add New Record Title";
$this->headTitle($title);
?>
<h2><?php echo $this->escapeHtml($title); ?></h2>

<?php
$form = $this->form;
$form->setAttribute("action", $this->url("addRecordTitle", array('controller' => "album", 'action' => "add")));
$form->prepare();

echo $this->form()->openTag($form);
echo $this->formRow($form->get('recordTitle'));
echo $this->formInput($form->get('submit')); 
echo $this->form()->closeTag($form); 
?>

【问题讨论】:

  • 您只是想知道如何在表单中附加错误消息,还是您的验证也有问题?
  • 我只是想知道如何将错误消息附加到我的表单中,我的验证工作正常

标签: exception zend-form zend-framework2


【解决方案1】:

以您的示例为例,一种方法就是这样。不过,我建议您阅读内置验证器 Db\RecordExists and Db\RecordNoExists,因为它们可能已经做了您想做的事情。

public function addAction() 
{
     $form = $this->getForm(); //theoretical

     try {
         $records->validateDuplicateRecords($recordTitle);
     } catch (\Exception $e) {
         $form->setMessages(array(
             'recordTitle' => array($e->getMessage())
         ));
         return new ViewModel(array(
             'form' => $form
         ));
     }

     if ($form->isValid()) { 
         //usual stuff
     }
}

使用此代码,您可以将错误消息附加到您的title-FormElement,请务必将名称编辑为您的标题元素的名称。

【讨论】:

  • 你的意思是说我不需要在我的 add.phtml 中明确地回显异常消息,请在这部分澄清。如果我需要在 add.phtml 中回显它,你能告诉我如何做到这一点。谢谢
  • 需要更多信息,我是否需要在控制器中使用任何 errorMessage 类。现在我没有使用任何东西,只是在做这些事情catch (\Exception $e)。因此,请务必对此有所了解,我已经尝试了您建议的方式,可惜不起作用,现在我没有在我的 add.phmtl 中回显任何错误消息,请也对此进行澄清。
  • 请提供您的 add.phtml 以便我可以看到您是如何设置视图的,因为我的代码应该让您运行 :) 但如果我看到您的视图,我可能会提供更多帮助( 2 小时内)
  • 感谢您的回复,我正在添加我的 add.phtml 文件,请仔细阅读并建议我需要进行的必要更改。感谢您的时间和精力
  • 我刚刚将recordTitle 稍微编辑到我的示例中。到目前为止,您应该能够理解我的代码,如果存在条目,则应该抛出异常。如果发生这种情况,错误会附加到您的表单并显示出来。无需手动回显任何内容。如果您需要更多帮助,我建议您在某处发布完整的addAction() 和表单+验证。错误可能出现在很多不同的地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多