当前位置: 首页 > 知识库问答 >
问题:

Laravel自定义验证检查参数中提供的其他字段

洪飞鸿
2023-03-14

我想使自定义验证器除了必需的_之外,如果所有字段都已填充,也不会失败。

现行规则:

'foo' => 'required_without:baz',
'bar' => 'required_without:baz',
'baz' => 'required_without_all:foo,bar',

将导致:

  1. Foo、Bar和Baz都是空的(错误)
  2. 一个Foo/Bar已填充,另一个为空(错误)
  3. Foo和Bar已满,Baz为空(OK)
  4. Foo和Bar是空的,Baz是满的(OK)
  5. Foo-Bar和Baz已填充(OK)← 我希望这变成一个错误

所以我使用扩展创建自定义验证器,并希望像这样使用它:

'foo' => 'required_without:bar|empty_if_present:baz',
'bar' => 'required_without:foo|empty_if_present:baz',
'baz' => 'required_without_all:foo,bar|empty_if_present:foo,bar',

AppServiceProvider.php

Validator::extend('empty_if_present', function ($attribute, $value, $parameters, $validator) {
    $attributeIsNotEmpty = !empty($value);
    $paramsAreEmpty = true;

    foreach ($parameters as $param) {
        // how do I check if Foo and Bar are empty??
        if ($param is not empty) {
            $paramsAreEmpty = false;
        }
    }

    return $attributeIsNotEmpty && $paramsAreEmpty;
}, 'The :attribute must be empty if :fields is present.');

共有1个答案

包和泰
2023-03-14

这是你想要的

Validator::extend('empty_if_present', static function ($attribute, $value, $parameters, $validator) {
    $attributeIsNotEmpty = ! empty($value);
    $paramsAreEmpty = true;

    foreach ($parameters as $param) {
        // how do I check if Foo and Bar are empty??
        if (! empty(request()->input($param))) {
            $paramsAreEmpty = false;
        }
    }

    return $attributeIsNotEmpty && $paramsAreEmpty;
}, 'The :attribute must be empty if :fields is present.');
 类似资料:
  • 问题内容: 我将Laravel应用程序从4升级到5。但是,我有一个自定义验证器,无法使用。 在L4中,我制作了一个 validators.php 文件,并使用将其包含在 global.php 中。 我尝试在L5中做一些相同的事情。我在 app / Validators / Validators.php中 放置了一个验证 器 ,并更新了 composer.json 。 但是,现在任何页面上都没有呈现

  • 在我的firebase应用程序中,用户可以使用 Google(Firebase的联邦提供商)或 Slack(作为自定义身份验证提供程序实现) 我想给用户链接两个帐户的机会。所以我要开的案子是: 用户使用Google登录 用户转到“设置”并单击“使用松弛连接” 然后应该链接用户帐户,以便他下次可以使用Slack或Google登录 我现在想知道,我是否可以通过某种方式从我的自定义松弛身份验证获得一个A

  • 我想验证我的控制器中的一个请求参数。请求参数应该来自给定值列表中的一个,如果不是,则应该抛出错误。在下面的代码中,我希望请求参数orderBy来自@Values准许中存在的值列表。 我已经编写了一个自定义bean验证器,但不知何故,它不起作用。即使我为查询参数传递任何随机值,也不会验证并引发错误。

  • 我正在尝试在laravel中编写用于验证的自定义消息。我在网上查过,看到一些帖子,其他人通过添加一个受保护的函数来解决同样的问题。我还向代码中添加了该函数,但它不起作用。这是我的代码这是myFormController.php: 公共函数请求(注册请求$request){$validated=$request- 这是RegistrationRequest.php: 使用Illumb\Contrac

  • cmf_check_verification_code($account, $code, $clear = false) 功能 手机或邮箱验证码检查,验证完后销毁验证码增加安全性,返回true验证码正确,false验证码错误 参数 $account:string手机或邮箱$code:string验证码$clear:boolean` 是否验证后销毁验证码 返回 string 错误消息,空字符串代码

  • 我正在创建一个laravel应用程序与自定义多重身份验证。我正在跟随这篇文章进行多重身份验证。https://pusher.com/tutorials/multiple-authentication-guards-laravel 我已经创建了登录和注册控制器定义的警卫和提供者,一切正常,我能够注册用户并登录他们。我写了一页(http://127.0.0.1:8000/admin)只有当管理员登录时