tp3.2分层

摘自tp3开发手册 思考一下分层

http://document.thinkphp.cn/manual_3_2.html#define_controller

多层控制器

ThinkPHP的控制器支持多层和多级,多层指的是控制器可以分层,例如除了默认的Controller控制器层(我们可以称之为访问控制器),还可以添加事件控制器(层),例如:

├─Controller 访问控制器
│ ├─UserController.class.php
│ ├─BlogController.class.php
│ ...
├─Event 事件控制器
│ ├─UserEvent.class.php
│ ├─BlogEvent.class.php
│ ...

访问控制器的名称是通过DEFAULT_C_LAYER设置的,默认是Controller。

访问控制器负责外部交互响应,通过URL请求响应,例如 http://serverName/Home/User/index,而事件控制器负责内部的事件响应,并且只能在内部调用,所以是和外部隔离的。

多层控制器的划分可以根据项目的需要自由分层。

如果是定义其他的控制器层,则不一定必须要继承系统的Controller类或其子类,通常需要输出模版的时候才需要继承Controller类。例如:

<?php
namespace Home\Event;
class UserEvent {
    public function login(){
      echo 'login event';
    }

    public function logout(){
      echo 'logout event';
    }
}

UserEvent事件控制器位于 Home/Event/UserEvent.class.php

模型分层

ThinkPHP支持模型的分层 ,除了Model层之外,我们可以项目的需要设计和创建其他的模型层。

通常情况下,不同的分层模型仍然是继承系统的\Think\Model类或其子类,所以,其基本操作和Model类的操作是一致的。

例如在Home模块的设计中需要区分数据层、逻辑层、服务层等不同的模型层,我们可以在模块目录下面创建ModelLogicService目录,把对用户表的所有模型操作分成三层:

  • 数据层:Home\Model\UserModel 用于定义数据相关的自动验证和自动完成和数据存取接口
  • 逻辑层:Home\Logic\UserLogic 用于定义用户相关的业务逻辑
  • 服务层:Home\Service\UserService 用于定义用户相关的服务接口等

三个模型层的定义如下:

Model类:Home\Model\UserModel.class.php

namespace Home\Model;
class UserModel extends \Think\Model{

}

实例化方法:D('User');

Logic类:Home\Logic\UserLogic.class.php

namespace Home\Logic;
class UserLogic extends \Think\Model{

}

实例化方法:D('User','Logic');

Api类:Home\Api\UserApi.class.php

namespace Home\Api;
class UserApi extends \Think\Model{

}

实例化方法:D('User','Api');

D方法默认操作的模型层由DEFAULT_M_LAYER参数配置,我们可以改变默认操作的模型层为Logic层,例如:

'DEFAULT_M_LAYER' => 'Logic', // 默认的模型层名称

这样,当我们调用:

$User = D('User');

的时候其实是实例化的 UserLogic类,而不是UserModel类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值