0

坚持 Yii 中的 MVC 基础知识,我试图将我的业务规则嵌入到模型类中,但在实现它时遇到了问题。手头的问题是阻止用户创建重复条目并在模型类中编写函数来检查表中是否已经存在该条目。我想在我的模型类中编写一个方法来查询相同模型的基础表,如果新的业务实体存在,它只会返回 false。如果我在控制器中对此进行编码,我可以实现所需的功能,但我想将其保留在模型中,以便无论在何处使用该模型,我都可以访问该方法并坚持 MVC 基础知识,它规定了瘦控制器和厚模型。提前致谢。

4

2 回答 2

1

最好的方法是避免直接在控制器中使用活动记录实例(至少)。

相反,您应该创建类似服务的结构,其中包含您CActiveRecordCFormModel实例之间的交互。这将使您更好地将表示层(视图、控制器和模板)与模型层隔离开来。

这样的服务还能够保持(有时,对)它所使用的实例CActiveRecord抛出的错误/异常。CFormModel

于 2012-11-01T16:50:55.627 回答
0

跨站点请求伪造预防可能是您正在寻找的?除非您对“重复条目”的想法与您的业务模型直接相关,在这种情况下,您可以覆盖CActiveRecord.beforeSave()并将您的逻辑放在那里,如果此方法返回 false,则记录将不会保存到数据库。

如果您使用后一种方法,并且希望将错误传递给视图并显示给用户,则始终可以使用CModel.addError()方法,在这种情况下是在您的 beforeSave 方法中。

不过,还有另一种选择,即使用自定义验证器

哪个更合适?取决于您的业务逻辑。

于 2012-11-01T13:28:00.537 回答