dootask/app/Module/Table/AbstractData.php
kuaifan 645cb02757 chore(upgrade): Laravel 8 直升 13(旧结构跑通)+ PHP 8.4 + 依赖升级与兼容修复
- composer: framework ^13.0、php ^8.3、laravel-s ~3.8.0、predis ^2.3、
  phpunit ^11.5、tinker ^3、excel ^3.1.69、captcha ^3.5、avatar ^6.5、
  ldaprecord-laravel ^4、pinyin ^5.3、notify 锁 ~1.28.0;
  移除 fideloper/proxy、fruitcake/laravel-cors、facade/ignition、
  laravel/sail、madnest/madzipper、手动钉的 symfony/mailer;
  symfony/console 锁 ^7.4(LaravelS Portal 与 console 8 的
  configure(): void 类型断言不兼容)
- $dates 移除:AbstractModel 改 getCasts() 合并默认 datetime 列,
  3 个子模型改 $casts
- Carbon 3:4 处 diffInSeconds 补 absolute 参数并取整
- LdapRecord v4:config use_ssl/use_tls→use_tls/use_starttls(env 变量名不变),
  LdapUser::$objectClasses 补类型声明
- Madzipper→原生 ZipArchive(Base::zipAddFiles,4 处调用)
- pinyin v5 静态 API(Base::getFirstCharter/cn2pinyin)
- laravolt/avatar 6.5:PatchedAvatar 修上游纵向对齐 bug
 (intervention 4.1.3 枚举无 middle),avatar 响应改 response()->file()
- TrustProxies 改框架内置基类,CORS 改 Illuminate\Http\Middleware\HandleCors
- Symfony Console 8 兼容:ManticoreSyncLock::handleSignal 新签名,
  pcntl 回调解耦
- 非 Swoole 运行时守卫:AbstractTask::task / PushTask::push /
  AbstractData(swoole table),artisan/测试上下文不再炸
  Target class [swoole] does not exist
- Laravel 11+ change() 丢修饰符:2023_12_07 与 2025_08_10 迁移重申
  nullable/default/comment(修复 fresh 安装)
- Setting/Ihttp 缺键访问加 ?? 守卫(PHP 8 警告在测试中转异常)
- phpunit.xml 迁移 11 schema;UserImportParseTest 改为自建部门数据

验证:8.4 容器内 migrate:fresh --seed 213 全过;php artisan test
145 passed/1 skipped;LaravelS(Swoole 6.2.1) /health 200、登录、
token 认证、WebSocket 握手、Task 投递、头像、图片裁剪冒烟全过

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 19:42:12 +00:00

106 lines
2.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Module\Table;
use ReflectionClass;
use Swoole\Table;
abstract class AbstractData
{
/** @var self */
protected static $instance = null;
/** @var Table */
protected $table;
protected function getTableName(): string
{
$className = (new ReflectionClass(static::class))->getShortName();
return lcfirst($className) . 'Table';
}
private function __clone() {}
private function __wakeup() {}
protected function __construct()
{
// 非 Swoole 运行时artisan/测试)无 swoole 绑定table 为 null各方法返回默认值
$this->table = app()->bound('swoole') ? app('swoole')->{$this->getTableName()} : null;
}
public function getTable()
{
return $this->table;
}
public static function instance()
{
if (static::$instance === null) {
static::$instance = new static();
}
return static::$instance;
}
public static function set($key, $value)
{
if (!self::instance()->table) {
return false;
}
return self::instance()->table->set($key, ['value' => $value]);
}
public static function get($key, $default = null)
{
if (!self::instance()->table) {
return $default;
}
$data = self::instance()->table->get($key);
return $data ? $data['value'] : $default;
}
public static function del($key)
{
if (!self::instance()->table) {
return false;
}
return self::instance()->table->del($key);
}
public static function exist($key)
{
if (!self::instance()->table) {
return false;
}
return self::instance()->table->exist($key);
}
public static function setMultiple(array $items)
{
foreach ($items as $key => $value) {
self::set($key, $value);
}
}
public static function clear()
{
if (!self::instance()->table) {
return;
}
foreach (self::instance()->table as $key => $row) {
self::del($key);
}
}
public static function getAll()
{
if (!self::instance()->table) {
return [];
}
$result = [];
foreach (self::instance()->table as $key => $row) {
$result[$key] = $row['value'];
}
return $result;
}
}