2012-04-25 55 views
5

我在“beforeSave”模型函数中保存模型实例执行某些操作。
我想向模型添加一些错误/消息,然后将它们放入控制器并向用户显示。
据我对如何实现此两种观点:Yii自定义模型错误

  • 使用用ActiveRecord功能"addError": $this->addError("dummy"=>"my message");虚拟属性是不这样做,因为我将不得不创造新的虚拟属性的最佳方式。
  • 添加一个新的属性“custom_errors”到模型和功能“addCustomErrors”

也许有一个内置的方式做到这一点或延期?
无论如何,我该怎么做呢?

+4

你想在'beforeSave'里添加错误信息吗?这不是一个好主意,为什么你在验证时不这样做? – Jon 2012-04-25 13:02:55

+0

因为我上传一个文件,必须检查它是否上传到服务器,或者我执行其他操作,如清除缓存等,与验证无关 – lvil 2012-04-25 13:07:24

+1

所有这些应该已经成功*在*之前完成尽管叫'保存'... – Jon 2012-04-25 13:28:19

回答

6

可以使用addError(),但没有必要补假的属性。如果错误不涉及任何模型本身那么你做错了什么:所以在你当p

它会是这样的:

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

如果有任何其他错误他们将会执行的file属性,因此您不必担心覆盖。

+0

只是一个问题。如果我想传递一个不是错误的消息。比方说,我想替换上传的文件,并想告诉用户它已被替换。如果我在addError中创建它,我不确定模型会被保存,因为它有错误。 – lvil 2012-04-29 06:34:10

+0

添加错误不应影响保存模型。只要它验证它应该保存 – Paystey 2012-04-29 10:19:58

+0

我需要验证该记录不是在一天的错误时间创建的。我究竟做错了什么? – Gherman 2015-01-14 06:39:23

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 2015-01-14 06:40:53