owl-admin icon indicating copy to clipboard operation
owl-admin copied to clipboard

代码生成器 admin-api/dev_tools/code_generator/form_data 接口502

Open wang9707 opened this issue 7 months ago • 22 comments

描述问题:

代码生成器 admin-api/dev_tools/code_generator/form_data 接口502

截图或视频:

Image

如何复现(请务必完整填写下面内容):

  1. owl-admin 版本是4.2?

你是在哪个版本的 owl-admin 上遇到的问题?

  1. PHP & Laravel 版本是什么?

php8.2 & laravel: 11.31

  1. 运行环境

mac

  1. 操作步骤

请简单描述一下复现的操作步骤...

wang9707 avatar May 07 '25 02:05 wang9707

这能看出个啥啊 🤔

slowlyo avatar May 07 '25 02:05 slowlyo

其他接口请求都正常 也没错误日志

wang9707 avatar May 07 '25 02:05 wang9707

可以看看nginx的错误日志

slowlyo avatar May 07 '25 02:05 slowlyo

pgsql 如果链接正确 数据库名称错误 getPdo 方法会直接结束请求 异常也捕获不到

Image

wang9707 avatar May 07 '25 06:05 wang9707

拥有相同的错误,laravel 12 php84

ctfang avatar May 07 '25 11:05 ctfang

Image

测试了一下, 即使是 pgsql, 数据库名称错误时也会直接报错的 (或许需要检查一下php的相关配置)

我对 pg 不是很熟悉, 推荐使用 mysql, 或者等一个熟悉 pg 的有缘人来解决这个问题(PR)

:)

slowlyo avatar May 07 '25 13:05 slowlyo

建议移除获取所有database.connections 的链接名称,config('database.connections', [])获取的是合并框架配置的链接,是所有数据库驱动的默认值都返回了,如果驱动报错 php 也无法捕获错误就会中断,mac 下必现,mysql 也会。

  1. 这里改成读取默认链接
  2. 页面改成可输入新内容的下拉框,支持自定义链接

ctfang avatar May 08 '25 04:05 ctfang

而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。

ctfang avatar May 08 '25 04:05 ctfang

建议移除获取所有database.connections 的链接名称,config('database.connections', [])获取的是合并框架配置的链接,是所有数据库驱动的默认值都返回了,如果驱动报错 php 也无法捕获错误就会中断,mac 下必现,mysql 也会。

  1. 这里改成读取默认链接
  2. 页面改成可输入新内容的下拉框,支持自定义链接

感谢反馈

不过这个地方还需要考虑其他情况, 比如:

  • 应用连接了多个数据库, 需要操作的表分布在不同的数据库中
  • 后台管理面板独立一个数据库, 但不是应用的默认数据库
  • 框架有多模块功能, 不同的模块可能存在不同的数据库中

slowlyo avatar May 08 '25 06:05 slowlyo

而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。

这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)

slowlyo avatar May 08 '25 06:05 slowlyo

而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。

这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)

你理解错了,不是配置错误才有问题。例如使用 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);
        });

ctfang avatar May 08 '25 06:05 ctfang

而且正常情况下,只有管理后台相关代码才需要代码生成,其他模块使用的数据库也用不到。

这就有点以偏概全了, 你觉得这是正常情况 就像我觉得正常情况下不应该出现数据库连接错误的情况 :)

你理解错了,不是配置错误才有问题。例如使用 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);
        });

还是同样的问题, 正常的配置为什么会报错? 😂

slowlyo avatar May 08 '25 07:05 slowlyo

配置没有问题,只是不用 MySQL 而已,不说 pgsql 这种数据库,换成mariadb兼容 mysql都错啊,你在看看我贴出来的代码,是硬编码判断 mysql 的。如果你测试没有问题可能是只用了env下DB_HOST等作为数据配置,你的系统只有一个数据库,刚好赋值了 laravel 框架默认而已。

ctfang avatar May 08 '25 07:05 ctfang

配置没有问题,只是不用 MySQL 而已,不说 pgsql 这种数据库,换成mariadb兼容 mysql都错啊,你在看看我贴出来的代码,是硬编码判断 mysql 的。如果你测试没有问题可能是只用了env下DB_HOST等作为数据配置,你的系统只有一个数据库,刚好赋值了 laravel 框架默认而已。

Image

Image

pgsql 作为默认数据库, 有什么问题?

slowlyo avatar May 08 '25 08:05 slowlyo

你删除DB_HOST 相关配置试试,不要让 mysql 配置起作用

ctfang avatar May 08 '25 08:05 ctfang

你删除DB_HOST 相关配置试试,不要让 mysql 配置起作用

Image

嗯哼~

slowlyo avatar May 08 '25 08:05 slowlyo

那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error

ctfang avatar May 08 '25 09:05 ctfang

那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error

试试 8.2 呢

slowlyo avatar May 08 '25 09:05 slowlyo

mac m3 8.2 有问题

wang9707 avatar May 08 '25 09:05 wang9707

mac m3 8.2 有问题

那就是你的环境能正常try 了 mysql 驱动的错误。我的mac m1 在 php84, php83 下new PDO 后就中断,没有机会try Error

Image

检查一下

slowlyo avatar May 08 '25 10:05 slowlyo

我现在就是 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

ctfang avatar May 08 '25 10:05 ctfang

我现在就是 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

原来是贫穷让我规避了这个错误 😏

slowlyo avatar May 08 '25 10:05 slowlyo