上一篇文章介绍,公共目录中的Model类主要是直接对数据库进行操作,或者对数据格式进行加工等,其实可以看作数据访问层。

而在模块中的Model负责的则是另一种用途,目录结构如下:

可以看到这里的model目录跟公共目录中的完全不一样,公共目录中的models基本是直接以数据库的名字来命名的,而这里的models从命名来看,更像是某些逻辑的处理,比如Singup、ResetPassword等,而且都是以Form来结尾,这就非常神奇了!

先任意点开一个来看看里面的内容,(原谅我的短小屏幕,一份分成三份截。。。):


第一张图中的内容非常简单,就是命名空间加引用,还有类中的属性,但是注意其中引用的 common\models\User 是数据层中的model

第二张图中的内容就非常多了,但是仔细看发现都在rules这个函数中,就可以很容易的判断出,是一个字段验证函数,主要用于验证类中的各个属性,具体的验证规则在文档中介绍的非常清晰明了

第三张图中的内容,从注释中看是用户注册功能,函数内容也是创建数据层中的类,并进行赋值

那么除了这三张图,再结合所对应的前端中的表单,不能看出,该Model类,主要用于验证表单,并保存数据,更加偏重于逻辑

再看 ResetPasswordForm.phpPasswordResetRequestForm.php 两个文件中,引用的数据层类依然是 common\models\User ,这证明这三个文件虽然操纵的都是用一个表中的数据变化,但是变化的逻辑是不相同的,而且对应的表单也是不相同的

由此可见,在Demo中模块中的models目录中的文件,是用于处理表单验证和相关逻辑的,而且一个文件代表一种逻辑场景,这样恰好符合了单一原则,而且在yii中,也是建议开发者将一些业务逻辑、业务数据展示、验证规则等放在模型中,在控制器中只是简单的进行中转操作,尽量不涉及过多的业务代码。
其实,这也是yii中结构层次的一个典型体现。