3

例外によってスローされる単純な例外メッセージを 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とcatchが純粋なphpのものでどのように機能するかは知っていますが、Zend Framework 2とzendフォームで例外を使用する方法はわかりません. 誰かがこれに対する解決策を持っている場合は、それを共有できれば幸いです。

PS私はアルバムモジュールに従ったので、基本的に私の構造は公式モジュールとほぼ同じです

編集: add.phtml が追加されました

add.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); 
?>
4

1 に答える 1

4

あなたの例を考えると、それを行う方法はこれです。ただし、組み込みのバリデーターDb\RecordExists および 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 に添付します。名前をタイトル要素の名前に編集してください。

于 2012-10-22T13:53:48.047 に答える