提示
说明:在开发调试过程中难免会有测试,调试产生脏数据,为了不影响后续开发,需要将调试数据清空.需要对数据库,缓存,以及es进行清空,如果每次都整体初始化是非常繁琐的,因此特别整理该文档,方便开发调试
测试实例
在开发过程中,随着业务变化,后台业务菜单一定会出现调整,这里选用最具有代表性的菜单(Permission)调试来说明
提示
说明:在开发调试过程中难免会有测试,调试产生脏数据,为了不影响后续开发,需要将调试数据清空.需要对数据库,缓存,以及es进行清空,如果每次都整体初始化是非常繁琐的,因此特别整理该文档,方便开发调试
在开发过程中,随着业务变化,后台业务菜单一定会出现调整,这里选用最具有代表性的菜单(Permission)调试来说明
提示
说明:在开发调试过程中难免会有测试,调试产生脏数据,为了不影响后续开发,需要将调试数据清空.需要对数据库,缓存,以及es进行清空,如果每次都整体初始化是非常繁琐的,因此特别整理该文档,方便开发调试
在开发过程中,随着业务变化,后台业务菜单一定会出现调整,这里选用最具有代表性的菜单(Permission)调试来说明
虽然事件结合事件监听也可以是异步执行,但是队列可以更加灵活的控制执行时间和执行次数,以及执行优先级等,所以项目异步全局使用队列来实现.
use App\Jobs\LaravelFastApi\V1\Admin\Login\AdminLogoutJob;
use App\Jobs\LaravelFastApi\V1\Admin\Login\EsAdminLoginJob;
//登录成功以后 12个小时以后数据库自动退出
//如果是开发模式就不执行自动退出
$developMode = config('youhujun.develop_mode');
if (!$developMode) {
AdminLogoutJob::dispatchIf($adminObject->remember_token, $adminObject)->delay(now()->addSeconds(3600 * 12));
}
EsAdminLoginJob::dispatchIf($adminObject->remember_token, $adminObject)->delay(now()->addSeconds(3));
因为用户资产高度敏感,所以单独拿出一章来说明
提示
注意需要结合DTO BusinessChangeUserAssetDTO
以下分别是 用户资产变更事件
提示
主要介绍如何使用laravel-fast-api-youhujun组件包的事件,事件作为AOP切面编程思想的直观落地体现
注意
1选择用事件来处理,虽然看起来冗余繁琐,但是可以实现松耦合和高可扩展性
2因为新版采用的是mysql+es双写架构,因此如果es需要同步处理,建议创建对应事件,代码解耦同步处理.
3如果需要异步处理,可以创建job队列,可以根据情况,将Job队列或者放在Service业务逻辑层,或者放置在EventListener事件监听层处理
在日常开发过程中难免要查看es的数据是否正确,就需要调试,特意整理常用调试命令如下
提示
提示小技巧
在开发过程中,也可以借助工具快速删除索引,然后执行创建同步
创建索引
php artisan create:es
是 VS Code 里最主流的 PHP 语言服务扩展,相当于给 PHP 装上了「智能大脑」,核心作用就是提供:
语法高亮、错误检查
代码补全、方法跳转、引用查找
命名空间、类、方法的自动索引
格式化、重构建议
用户配置(User): 作用于你当前电脑上所有 VS Code 窗口,是全局默认配置。不管打开哪个项目,这些设置都会生效。
**工作区配置(Workspace):**只对当前打开的这个项目生效,优先级比用户配置更高。如果和用户配置里的项冲突,会以工作区配置为准。
提示
结合laravel-fast-api-youhujun
先在 DebugSeeder 中添加
use Database\Seeders\YouHu\YouHuSeeder;
提示
结合laravel-fast-api-youhujun
先在 DebugSeeder 中添加
use Database\Seeders\YouHuShop\YouHuShopSeeder;
在实际开发工作中当遇到需要处理树形数据时,通常会使用递归的方式来实现。
提示
假设是在一个类中实现
private function listToTree(array $list, string $idField = 'id', string $pidField = 'parent_id', int $rootPid = 0): array
{
$tree = [];
$map = [];
// 1、先全量索引,用引用保证后续修改能同步
foreach ($list as &$item) {
$item['children'] = [];
$map[$item[$idField]] = &$item;
}
// 解除引用,避免副作用
unset($item);
// 2、循环挂载子节点
foreach ($map as &$item) {
$pid = $item[$pidField];
if ($pid === $rootPid) {
// 顶级节点
$tree[] = &$item;
} elseif (isset($map[$pid])) {
// 找到父节点,塞入children(通过引用同步)
$map[$pid]['children'][] = &$item;
} else {
// 找不到父节点
echo "警告:ID={$item[$idField]} 父ID={$pid} 不存在,丢弃\n";
}
}
unset($item);
return $tree;
}