ginkgo


分层模型

ginkgo 支持模型的分层,其分层方式与 分层控制器 类似。

在控制器中实例化模型时,系统会默认实例化当前模块层的模型。例如 index 模块下的 User 控制器中实例化某个模型:

namespace app\ctrl\index;

use ginkgo\Loader;

class User {
    function __construct() { //构造函数
        $this->mdl_user = Loader::model('User');
    }
}

模型的实际位置

app\model\index\user.mdl.php

定义如下

namespace app\model\index;

use ginkgo\Model;

class User extends Model {
}

还可以定义分层模型。

例如,定义 index 模块 event 层下的 Blog 模型如下:

namespace app\model\index\event;

use ginkgo\Model;

class Blog extends Model {

}

模型的实际位置是

app/model/index/event/blog.mdl.php

定义完成后,就可以用下面的方式实例化模型了:

use ginkgo\Loader

$event = Loader::model('Blog', 'event');

跨模块调用

模型支持跨模块调用,例如:

use ginkgo\Loader

$event = Loader::model('Blog', '', 'admin');

模型的实际位置是

app/model/admin/blog.mdl.php

表示实例化 admin 模块的 Blog 模型类

use ginkgo\Loader

$event = Loader::model('Blog', 'event', 'admin');

模型的实际位置是

app/model/admin/event/blog.mdl.php


分层模型实例

开发者可以根据项目的需要创建其他的模型层。通常情况下,不同的分层模型仍然是继承 ginkgo\Model 类或其子类,所以基本操作都是一致的。

以下是一个分层的例子,以用户表为例:

在某个项目中,先设置基本模型,放置于 ./app/model 目录下。然后在 ./app/model 下分别建立 consoleapi 目录,用于建立分层模型。

把模型操作分成三层:

基本层:app\model\User 用于定义基本数据的操作

console 模块层:app\model\console\User 用于定义后台对用户的操作

console\event 模块层:app\model\console\event\User 用于定义后台对用户的事件操作

api 模块层:app\model\api\User 用于 API 接口对用户的操作

三个模型层的定义如下:

基本层,实际位置

app\model\user.mdl.php

namespace app\model;

use ginkgo\Model;

class User extends Model { // 继承模型类
}

console 模块层,实际位置

app\model\console\user.mdl.php

namespace app\model\console;

use app\model\User as User_Base; // 继承基本模型

class User extends User_Base {
}

console\event 模块层,实际位置

app\model\console\event\user.mdl.php

namespace app\model\console\event;

use app\model\console\User as User_Console; // 继承 console/User 模型

class User extends User_Console {
}

api 模块层,实际位置

app\model\api\user.mdl.php

namespace app\model\api;

use app\model\User as User_Base;

class User extends User_Base { // 继承基本模型
}

假设在 app\ctrl\console\User 控制器中实例化模型:

$this->mdl_user = Loader::model('User');

模型的实际位置

app\model\console\user.mdl.php

$this->mdl_user = Loader::model('User', 'event');

模型的实际位置

app\model\console\event\user.mdl.php

$this->mdl_user = Loader::model('User', '', 'api');

模型的实际位置

app\model\api\user.mdl.php

$this->mdl_user = Loader::model('User', '', false);

模型的实际位置

app\model\user.mdl.php