【问题标题】:Laravel validation: validate field only if another is presentLaravel 验证:仅在另一个存在时验证字段
【发布时间】:2016-01-11 10:20:19
【问题描述】:

我想仅在存在“needs_login”时验证“account_id”。我这样做了:

$rules = [
    'account_id' => ['required_with:needs_login','custom_validation']
];

但它不起作用,因为如果 needs_login 字段不存在但 account_id 有一些值,那么它会尝试执行“custom_validation”。 我也试着把'sometimes'参数放了

$rules = [
    'account_id' => ['required_with:needs_login', 'sometimes', 'custom_validation']
];

但是没有用。

有什么想法吗?

P.S.:请记住,我只想在 needs_login 存在时验证 account_id,而不是在 needs_login 存在时检查 account_id 是否存在。

【问题讨论】:

  • 你使用的是哪个 Laravel 版本,5.1?
  • 版本为4.2.17
  • 也许不能这样,因为我想要一个验证,如果它是真的,那么也验证其他验证,如果它是假的,那么停止验证控件并让它通过。但如果您有任何想法,我们将不胜感激
  • 非法鸽子的答案是正确的。

标签: php validation laravel


【解决方案1】:

你试过 required_if 吗?

$rules = [
    'account_id' => ['required_if:needs_login,1']
];

【讨论】:

  • 和以前一样。如果 account_id 存在,即使 needs_login 不存在,它也会尝试对 account_id 进行其他验证
  • 它还试图进行哪些其他验证?仅当“needs_login”具有值时才需要“account_id”。如果“needs_login”没有值,则验证将失败。我看不出它是如何进行另一次验证的?
  • 这是正确的答案。但是,我认为 [ ] 数组标签不应该存在。
  • @zeros-and-ones 是的,您对数组标签是正确的。当我使用数组标签(用于测试会发生什么)时,我在调试器中收到“数组到字符串转换”错误消息。 IllegalPigeon - 我可以确认您的解决方案对我有效,减去数组标签。
【解决方案2】:

如果你要走“有时”的路线,这样的东西适用于 Laravel 5。也许你可以适应L4?好像是一样的in the Docs

$validation = Validator::make($formData, [
    'some_form_item' => 'rule_1|rule_2'
]
$validation->sometimes('account_id', 'required', function($input){
    return $input->needs_login == true;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2021-03-11
    • 2020-04-26
    • 1970-01-01
    相关资源
    最近更新 更多