灰太狼 2017-12-17 15:41:18 1771次浏览 0条回复 0 0 0

这片文章主要是为了做纪录,新手入门。

模型Model

最近在开发RESTfulAPI,对于模型所了解的范围只是知道它封装好了AR可以提供数据表,然后可以直接使用模型查询数据了。

例如Common文件下: 有一个BaseModel继承了AR 在同级目录下还有个UserModel 继承了BaseModel.

平时在前台或后台使用时是这样用的: 前台: use Common\UserModel $u = User::find()->where()->one();

后台: use Common\UserModel $u = User::fnd()->where()->one();

这时候在想,是不是应该在前台设计一个Model文件夹,里面创建一个UserModel 继承 CommonUserModel 以后在前台使用User模型的时候就可以直接使用frond\Model\UserModel了 修改后的前台使用: use frond\Model\UserModel

同样-创建一个后台的User模型 backend\Model\UserModel.php

修改后的后台使用 use backend\Model\UserModel

。开头也说了,最近在写RESTful API,肯定也会用到User模型了。

同样也是api下创建一个供api使用的User模型 api\Model\UserModel.php 继承 Commo\UserModel.php

api 里使用时就可以use api\Model\UserModel

RESTful API 需要设置返回字段时就在api\Model\UserModel.php 里设置:

public function fields(){
    return [
    ];
}

最后总结: 不同的地方使用属于自己的模型,后续就可以在自己的模型里扩展很多静态方法给控制器提供数据。是控制器只负责获取数据并渲染页面即可了。

之前的写法会在控制器里引用模型。然后在控制器里直接这么写的:

$u = User::fnd()->where()->one(); 或 $usr = new User(); ....

修改后应该是这样写:

在api\Model\UserModel.php 里写上:

public function getUser($uid){
    return User::fnd()->where(['id'=>$uid])->one();
}

控制器里这样写:

public function actionIndex(){
    $u = User::getUser(1);
}

大神们,我这样的想法设计可以吗?

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册