代码生成器 admin-api/dev_tools/code_generator/form_data 接口502
描述问题:
代码生成器 admin-api/dev_tools/code_generator/form_data 接口502
截图或视频:
如何复现(请务必完整填写下面内容):
- owl-admin 版本是4.2?
你是在哪个版本的 owl-admin 上遇到的问题?
- PHP & Laravel 版本是什么?
php8.2 & laravel: 11.31
- 运行环境
mac
- 操作步骤
请简单描述一下复现的操作步骤...
这能看出个啥啊 🤔
其他接口请求都正常 也没错误日志
可以看看nginx的错误日志
pgsql 如果链接正确 数据库名称错误 getPdo 方法会直接结束请求 异常也捕获不到
拥有相同的错误,laravel 12 php84
测试了一下, 即使是 pgsql, 数据库名称错误时也会直接报错的 (或许需要检查一下php的相关配置)
我对 pg 不是很熟悉, 推荐使用 mysql, 或者等一个熟悉 pg 的有缘人来解决这个问题(PR)
:)
建议移除获取所有database.connections 的链接名称,config('database.connections', [])获取的是合并框架配置的链接,是所有数据库驱动的默认值都返回了,如果驱动报错 php 也无法捕获错误就会中断,mac 下必现,mysql 也会。
- 这里改成读取默认链接
- 页面改成可输入新内容的下拉框,支持自定义链接
而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。
建议移除获取所有database.connections 的链接名称,config('database.connections', [])获取的是合并框架配置的链接,是所有数据库驱动的默认值都返回了,如果驱动报错 php 也无法捕获错误就会中断,mac 下必现,mysql 也会。
- 这里改成读取默认链接
- 页面改成可输入新内容的下拉框,支持自定义链接
感谢反馈
不过这个地方还需要考虑其他情况, 比如:
- 应用连接了多个数据库, 需要操作的表分布在不同的数据库中
- 后台管理面板独立一个数据库, 但不是应用的默认数据库
- 框架有多模块功能, 不同的模块可能存在不同的数据库中
而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。
这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)
而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。
这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)
你理解错了,不是配置错误才有问题。例如使用 pgsql 这个驱动作为数据库,但是现在这个依赖或循环所有 database.connects. 而这里的配置会返回 mysql, sqlite。。。这些不使用数据库配置,所有 100% 会报错。比如代码看着像是有过滤,其实过滤是没有效果的。
// mysql 链接在 laravel 合并了框架默认配置是必然存在的,但可能不使用, 肯定会报错
$databases = Arr::where(config('database.connections', []), function ($value) {
$supports = ['mysql'];
return in_array(strtolower(Arr::get($value, 'driver')), $supports);
});
而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。
这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)
你理解错了,不是配置错误才有问题。例如使用 pgsql 这个驱动作为数据库,但是现在这个依赖或循环所有 database.connects. 而这里的配置会返回 mysql, sqlite。。。这些不使用数据库配置,所有 100% 会报错。比如代码看着像是有过滤,其实过滤是没有效果的。
// mysql 链接在 laravel 合并了框架默认配置是必然存在的,但可能不使用, 肯定会报错 $databases = Arr::where(config('database.connections', []), function ($value) { $supports = ['mysql']; return in_array(strtolower(Arr::get($value, 'driver')), $supports); });
还是同样的问题, 正常的配置为什么会报错? 😂
配置没有问题,只是不用 MySQL 而已,不说 pgsql 这种数据库,换成mariadb兼容 mysql都错啊,你在看看我贴出来的代码,是硬编码判断 mysql 的。如果你测试没有问题可能是只用了env下DB_HOST等作为数据配置,你的系统只有一个数据库,刚好赋值了 laravel 框架默认而已。
配置没有问题,只是不用 MySQL 而已,不说 pgsql 这种数据库,换成mariadb兼容 mysql都错啊,你在看看我贴出来的代码,是硬编码判断 mysql 的。如果你测试没有问题可能是只用了env下DB_HOST等作为数据配置,你的系统只有一个数据库,刚好赋值了 laravel 框架默认而已。
pgsql 作为默认数据库, 有什么问题?
你删除DB_HOST 相关配置试试,不要让 mysql 配置起作用
你删除DB_HOST 相关配置试试,不要让 mysql 配置起作用
嗯哼~
那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error
那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error
试试 8.2 呢
mac m3 8.2 有问题
mac m3 8.2 有问题
那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error
检查一下
我现在就是 fork 了你的代码,直接加了个配置 admin.database.generator 跳过错误了,严格来说不是你的代码导致,而是 PDO 无法抛出异常导致了代码中断。
楼上发生的错误建议重新编译 php。mac 现在系统依赖一团糟糕 brew 官方维护php基本全错了。使用全依赖静态编译才能正常使用。
spc build --build-cli --build-fpm "apcu,bcmath,calendar,ctype,curl,dba,dom,exif,fileinfo,filter,gd,iconv,intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sodium,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib" --with-libs="libjpeg,freetype" --debug
我现在就是 fork 了你的代码,直接加了个配置 admin.database.generator 跳过错误了,严格来说不是你的代码导致,而是 PDO 无法抛出异常导致了代码中断。
楼上发生的错误建议重新编译 php。mac 现在系统依赖一团糟糕 brew 官方维护php基本全错了。使用全依赖静态编译才能正常使用。
spc build --build-cli --build-fpm "apcu,bcmath,calendar,ctype,curl,dba,dom,exif,fileinfo,filter,gd,iconv,intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sodium,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib" --with-libs="libjpeg,freetype" --debug
原来是贫穷让我规避了这个错误 😏