ichynul / configx

[laravel-admin]增加/修改配置项,管理网站的配置(Add / edit configuration, Manage site configuration)
https://gitee.com/ichynul/configx
MIT License
32 stars 7 forks source link

表单项输入值不合法时有错误提示,但写入了数据库 #26

Closed Cuifc closed 4 years ago

Cuifc commented 4 years ago

如我添加了一个比例的字段,设置了规则 如 :@rules : required|regex:/^\d(\d)?(.\d(\d)?)?$/ 输入122.235 提交表单,有格式无效的错误提示,但这个数值还是写入的数据库中。请修复, 同时发现源码是按英文','拆分参数,那么我的正则如写成@rules : required|regex:/^\d{1,2}(.\d{1,2})?$/,保存设置成功, 但回到/configx/edit/ 则会报错。

ichynul commented 4 years ago

第一个问题,你说的有道理,错误的值虽然保存后提示了,但可能在修正以前,程序读了有问题的值。这个改动要比现在的复杂一些,要根据错误提示找到具体的配置。 第二个问题,用','分割的情况一般是多选,多文件等情况,前台提交过来的是数组,要转换成字符串存储。但看你这情况好像不是只这个,你这个规则在正常的表单里面测试一下,验证规则对不对。

Cuifc commented 4 years ago

第一个问题,你说的有道理,错误的值虽然保存后提示了,但可能在修正以前,程序读了有问题的值。这个改动要比现在的复杂一些,要根据错误提示找到具体的配置。 第二个问题,用','分割的情况一般是多选,多文件等情况,前台提交过来的是数组,要转换成字符串存储。但看你这情况好像不是只这个,你这个规则在正常的表单里面测试一下,验证规则对不对。

第一个,在Updater.php中的saveConfigs方法校验完字段值时,如有错误直接抛出,而不紧接着进行保存。 第二个,验证规则是对的,源码,Tool.php 会按","拆分,那required|regex:/^\d{1,2}(.\d{1,2})?$/ “|”后面的就会变成三个参数,第一个参数是"/^\d{1",第二个参数是"2}(.\d{1",第三个参数是“2})?$/”,那保存时在call_user_func_array 就会报错了

ichynul commented 4 years ago

明白你的意思了,第一的话可以加一个配置项,遇到错误就全部取消保存,或者像现在这样,先保存再提示。 第二个问题的话处理起来比较麻烦,方法参数按','来拆分,方法使用有些限制,参数只能是简单的值,复杂的如果要处理就比较麻烦。最好的办法还是不用方法,采用配置的形式rules : required|regex:/^\d{1,2}(.\d{1,2})?$/,稍加修改一下就可以支持这个配置规则了。

ichynul commented 4 years ago

新版本已经发布,你升级一下。 用字段配置的形式,不要用方法,就是前面的@不要 rules : required|regex:/^\d{1,2}(.\d{1,2})?$/ 不过这个正则验证不知道怎么回事输入小数也验证不通过。 新加了个配置项:

'break_when_errors' => false // do not save anything if have errors

设为true,那有任何错误都全部不保存。

Cuifc commented 4 years ago

新版本已经发布,你升级一下。 用字段配置的形式,不要用方法,就是前面的@不要 rules : required|regex:/^\d{1,2}(.\d{1,2})?$/ 不过这个正则验证不知道怎么回事输入小数也验证不通过。 新加了个配置项:

'break_when_errors' => false // do not save anything if have errors

设为true,那有任何错误都全部不保存。

非常感谢,正则 用 regex:/^\d{1,2}(.\d{1,2})?$/,需转义匹配 "." 这个特殊字符,另如 //@methodname : arg1, arg2 ... //suported args types [string/integer/folat/boolean]

参数能支持数组就更好了