2012-04-25 13 views
5

"beforeSave"モデル関数でいくつかのアクションを実行するモデルインスタンスを保存しています。
いくつかのエラー/メッセージをモデルに追加してから、それらをコントローラに取得してユーザーに表示したいと考えています。Yiiカスタムモデルエラー

  • 使用それは私が新しいダミー属性を考案する必要がありますようにそれを行うための最善の方法ではありませんActiveRecordの機能"addError": $this->addError("dummy"=>"my message");ダミー属性:
    は、私の知る限りでは、これを実装する方法の2つのアイデアを持っています。
  • 多分それを行うには、組み込みの方法または拡張子があるモデルと機能「addCustomErrors」へ

の新しいプロパティ「custom_errors」を追加しますか?
どうすればいいですか?

+4

'beforeSave'の中にエラーメッセージを追加しますか?それはいい考えではないですが、検証中にそれをしないのはなぜですか? – Jon

+0

たとえば、ファイルをアップロードしてサーバーにアップロードしたことを確認する必要がある、またはキャッシュのクリアなど、検証とは何の関係もないその他の操作を実行する – lvil

+1

これはすべて正常に完了するはずです。しかし「save」と呼んでください... – Jon

答えて

6

あなたはaddError()を使用することができますが、偽の属性を構成するために必要はありませんのような何かをするだけでした。エラーがモデル自体にに関連していない場合は、あなたの間違って何かやって:上の他のエラーがある場合

$this->addError('file', 'Something happened I wasn\'t pleased with'); 

:P

はだからあなたの場合には、それはようなものになるだろうfile属性を使用しているため、上書きを心配する必要はありません。

+0

ただ1つの質問。エラーではないメッセージを渡したい場合アップロードしたファイルを置き換えて、そのファイルが置き換えられたことをユーザーに伝えたいとします。 addErrorで作成した場合、エラーがあるため、モデルが保存されるかどうかはわかりません。 – lvil

+0

エラーを追加してもモデルの保存には影響しません。それが保存する必要があることを確認する限り、 – Paystey

+0

私はその日の間違った時刻にレコードが作成されていないことを検証する必要があります。私は間違って何をしていますか? – Gherman

2

ここでは問題は表示されません。単にaddError()http://www.yiiframework.com/doc/api/1.1/CModel#addError-detailを使用してください。モデルもそれにsave()を呼び出した後に保たれているので、あなたは

yourController() 
{ 
    do_something(); 
    do_something(); 
    $model->save(); 
    $errors[]=do_what_you_have_to_do_to_define_the_errors_which_will_be_added(); 
    $model->addError(attribute, $errors); 
    $this->render(viewWhereTheErrorWillBeDisplayed, $model); 
} 
+0

質問は、属性なしでエラーを追加する方法です – Gherman