【问题标题】:Validating input data with the criteria specified in a database field in Laravel使用 Laravel 数据库字段中指定的条件验证输入数据
【发布时间】:2019-05-14 12:52:38
【问题描述】:

如何使用数据库中指定的条件验证输入数据?

假设,我有一个最多支持 255 个字符的用户名的数据库。现在,在验证输入数据时,而不是硬编码用户名中允许的最大字符数(比如说 80 ),我如何才能将允许的最大字符数存储在设置表中,然后使用该值来验证输入数据。

基本上,我想让管理员选择在管理面板中配置最大允许字符数。

有什么方法可以实现,而不必使用自定义的验证规则?

编辑: 假设我们有一个 char(255) 类型的数据库字段来存储电子邮件。管理员可能不一定希望允许长度超过 30 个字符的电子邮件,在这种情况下,他可以配置一个设置以允许电子邮件中的最大字符数,设置值将存储在数据库中,以供将来使用验证目的。

【问题讨论】:

  • 为什么不从配置参数中设置最大字段长度? w3schools.com/tags/att_input_size.asp
  • @Patrick 这适用于 html 元素,应该这样做。但是,您仍然必须验证客户端。该值可以很容易地规避。
  • 这不是问题。我想在数据库上设置最大理论大小,同时让管理员选择根据他的选择设置最大允许大小。

标签: php laravel validation


【解决方案1】:

也许您可以让管理员自行定义验证规则。

我想你有一个带有验证规则的 db 表,如下所示:

validation_rules 表示例结构:

id          | INT
field_name  | VARCHAR(50)
field_rules | VARCHAR(50)

...other fields you may need...

所以,当你必须验证它时,你可以这样做:

$rules = ValidationRule::whereIn('field_name', array_keys($request->all()))
                       ->pluck('field_rules', 'field_name');

$validator = Validator::make($request->all(), $rules);

【讨论】:

    【解决方案2】:

    如果您不想在 PHP 中构建一个根据您放入 DB 的内容来验证长度的函数,您可以使用插入来验证长度。

    INSERT
    INTO
        users(username)(
            SELECT
                '".$_POST[' username']."'
            FROM
                settings
            WHERE
                settings.field = 'max_username'
                AND LENGTH('".$_POST[' username']."')<= settings.data
        )
    

    你不会使用 $_POST...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多