💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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层实现。 * * *