【问题标题】:Laravel Request validation: validate another field based on the "name"Laravel 请求验证:根据“名称”验证另一个字段
【发布时间】:2021-03-11 15:12:24
【问题描述】:

我有一个绑定到“x-editable”插件的多个字段,该插件发送更改的数据,并且像所有数据一样,我想验证它们。

但这里的问题是它总是只发送 2 个字段:name=is_on_probation&value=1。这里,name 键是必须验证的字段(它与 DB 列相同),value 是不言自明的。

我写了一个这样的验证规则:

'is_on_probation' => 'sometimes|...'

但后来我意识到它不会被验证,因为验证的实际主题在value字段中。

所以,这里的问题是:如何验证value 字段并根据name 值应用相应的规则?

我创建这个逻辑是为了不让额外的数组和逻辑污染控制器,所以它只会保存传递的参数。

问候!

附:我搜索了 StackOverflow,但没有找到最能描述我的问题的问题。可能是我看错了,没看到。

更新

经过一番思考,我想出了使用switch 并在那里传递请求字段的解决方案,如下所示:

switch($this->request->get('name')) {
  case "email":
    $rules = [
      'value' => 'sometimes|required|unique:users,email|email:rfc',
    ];
    break;

  case "phone":
    $rules = [
      'value' => 'sometimes|required|min:8|max:13|regex:/^(\+371)?\s?[0-9]{8}$/'
    ];
    break;
}

$rules[] = [
  'pk' => 'required|exists:users,id'
];

但是,问题仍然存在 - 这是最好的解决方案和良好的做法吗?

【问题讨论】:

    标签: php laravel laravel-validation laravel-request


    【解决方案1】:

    在开始验证之前尝试将您的数据合并到请求中。

    $request->merge([$request->input('name') => $request->merge([$request->input('value')]);
    

    然后你的验证

    'email' => 'sometimes|...','phone' => 'sometimes|...',
    

    【讨论】:

    猜你喜欢
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2016-01-25
    • 2023-03-29
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多