# app应用
系统相关的控制器,业务,中间件,以及事件等都会放在app目录下面
## app目录
```
├─app
│ api 基础功能接口控制器
│ component 基础模板组件控制器
│ cron 基础任务控制器
│ event 基础事件类
│ exception 异常处理类
│ index index控制器
│ install install控制器
│ job 消息队列
│ lang 语言包
│ model 数据业务层
│ pay 支付回调控制器
│ shop 后台管理端控制器
│ shopapi 后台管理端api接口
│ common.php 公共函数
│ middleware.php 中间件配置
│ event.php 事件配置
│ Request.php 请求扩展
```
**一,component目录:主要指自定义模板组件后台配置部分**
~~~
<?php
namespace app\component\controller;
/**
* 文本·组件
*/
class Text extends BaseDiyView
{
/**
* 后台编辑界面
*/
public function design()
{
return $this->fetch("text/design.html");
}
}
~~~
* * *
**二,event目录:主要指事件实现类**
~~~
use app\model\member\Member;
use app\model\member\MemberAccount;
use app\model\member\MemberLevel;
use app\model\order\OrderCommon;
/**
* 订单完成后
*/
class OrderComplete
{
// 行为扩展的执行入口必须是run
public function handle($data)
{
//订单返还积分
$order_model = new OrderCommon();
$condition = array(
['order_id', '=', $data['order_id']]
);
$order_info_result = $order_model->getOrderInfo($condition, 'order_money,order_status,site_id,member_id');
$order_info = $order_info_result['data'];
//如果缺失已完成
if ($order_info['order_status'] == 10) {
//会员等级 计算积分返还比率
$site_id = $order_info['site_id'];
$member_id = $order_info['member_id'];
$member_model = new Member();
$member_info_result = $member_model->getMemberInfo([['member_id', '=', $member_id], ['site_id', '=', $site_id]], 'member_level');
$member_info = $member_info_result['data'];
if ($member_info['member_level'] > 0) {
$member_level_model = new MemberLevel();
$member_level_info_result = $member_level_model->getMemberLevelInfo([['level_id', '=', $member_info['member_level']], ['site_id', '=', $site_id]], "point_feedback");
$member_level_info = $member_level_info_result['data'];
if ($member_level_info['point_feedback'] > 0) {
//计算返还的积分
$point = round($order_info['order_money'] * $member_level_info['point_feedback']);
$member_account_model = new MemberAccount();
$result = $member_account_model->addMemberAccount($site_id, $member_id, 'point', $point, 'order', '会员消费回馈积分', '会员消费奖励发放');
if ($result['code'] < 0) {
return $result;
}
}
}
}
return $order_model->success();
}
}
~~~
* * *
**三,job目录:消息队列执行目录**
关于消息队列的使用方式,之后的教程会进行说明,这里主要是指消息队列的实现。
~~~
<?php
namespace app\job;
use app\model\system\Cron;
use think\facade\Log;
use think\queue\Job;
/**
* 事件通过队列异步调用
* Class Eventasync
* @package app\job
*/
class Cronexecute
{
public function fire(Job $job, $data)
{
$job->delete();
try {
$res = event($data[ 'event' ], [ 'relate_id' => $data[ 'relate_id' ] ]);
$data_log = [
'name' => $data[ 'name' ],
'event' => $data[ 'event' ],
'relate_id' => $data[ 'relate_id' ],
'message' => json_encode($res)
];
Log::write("计划任务:{$data[ 'event' ]} relate_id: {$data[ 'relate_id' ]}执行结果:" . json_encode($res, JSON_UNESCAPED_UNICODE));
$cron_model = new Cron();
$cron_model->addCronLog($data_log);
} catch (\Exception $e) {
Log::write($e->getMessage());
$job->delete();
}
}
}
~~~
* * *
**四,model目录:数据业务层**
系统以及插件的model层主要用于实现对应的数据业务逻辑,控制器不能直接调用数据库,要调用model层实现。
* * *
- 序言
- 安装教程
- 运行环境
- 安装手册
- 基础
- 前期准备
- 伪静态配置
- 后台目录结构
- uniapp(手机端)目录结构
- 开发命名规范
- 控制器命名规范
- model层命名规范
- 前端(管理页面)命名规范
- 提示面板
- 表单
- uniapp(手机端)命名规范
- api接口命名规范
- 架构
- 入口文件
- config设置
- app应用目录
- component(自定义模板组件)
- model层(数据业务层)
- 数据库操作
- job(消息队列)
- event(事件)
- request(请求对象)
- common(公共函数)
- log(日志处理)
- lang(语言包)
- addon插件
- 数据字典
- 系统基础表
- 配送相关表
- 商品相关表
- 网站设置相关
- 会员相关表
- 订单相关表
- 营销(组合套餐)
- 营销(砍价)
- 营销(优惠券)
- 营销(满减)
- 营销(拼团)
- 营销(秒杀)
- 店铺相关表
- 微信相关表
- 门店相关表
- 结算相关表
- 应用(分销)
- 功能模块
- 商品模块
- 会员模块
- 订单模块
- 数据统计
- 消息队列
- 支付模块
- 短信模块
- 客服
- api接口
- 接口开发
- 插件开发
- 事件开发
- 常用事件
- 插件目录与开发
- 常用插件
- 支付插件
- 拼团插件
- 新人礼