【问题标题】:Laravel Validation of Required WithLaravel 验证要求使用
【发布时间】:2018-01-28 10:40:20
【问题描述】:

我正在尝试在我的控制器中为我的请求设置验证,并且我正在尝试弄清楚我如何让地址、城市、州、邮编相互依赖,就好像有一个值一样那么它们都必须有一个值,address2 是唯一一个独立但仅取决于地址的值。出于某种原因,这不起作用。例如,如果提交了城市,则验证通过。所以我不太明白我做错了什么。

'address' => 'required_with_all:city,state,zip|string|nullable',
'address2' => 'required_with:address|string|nullable',
'city' => 'required_with_all:address,state,zip|string|nullable',
'state' => 'required_with_all:address,city,zip|string|size:2|nullable',
'zip' => 'required_with_all:address,city,state|integer|digits:5|nullable'

【问题讨论】:

    标签: laravel laravel-5.3


    【解决方案1】:

    required_withrequired_with_all 不会按照您解释它们的方式工作。 required_with_all 表示如果以下所有字段都有值,则此字段是必需的。例如,required_with_all:address,state,zip 表示“如果 address 和 state 和 zip 都有值,则需要城市”。

    你正在努力实现:

    • 如果address 有值,则citystatezip 是必需的
    • 如果address2 有值,则需要address
    • 如果city 有值,则需要addressstatezip
    • 如果state 有值,则addresscityzip 是必需的
    • 如果zip 有值,则需要addresscitystate

    您正在寻找的规则 required_with,但逻辑不同。您可以通过锚定一个字段来有效地使用required_with 规则,例如:锚定address 并且您的英文规则可以是“如果address 具有值,则需要城市、州和邮政编码,或者如果@ 987654347@、statezip 有一个值,则需要 address”,可以构造为:

    $this->validate($request, [
        'address' => 'required_with:city,state,zip|string|nullable',
        'city' => 'required_with:address|string|nullable',
        'state' => 'required_with:address|string|size:2|nullable',
        'zip' => 'required_with:address|integer|digits:5|nullable'
    ]);
    

    对于address2,您的规则是“如果address2 具有值,则需要address”(这将级联导致statecityzip 也需要)。这再次使用required_with 构造,我们在address 上设置required_with

    $this->validate($request, [
        'address' => 'required_with:city,state,zip,address2|string|nullable',
        'address2' => 'string|nullable',
        'city' => 'required_with:address|string|nullable',
        'state' => 'required_with:address|string|size:2|nullable',
        'zip' => 'required_with:address|integer|digits:5|nullable'
    ]);
    

    编辑:此答案的先前版本存在错误,现已修复。

    【讨论】:

    • 惊人的答案。感谢您的帮助。
    猜你喜欢
    • 2017-11-21
    • 2020-01-13
    • 1970-01-01
    • 2020-12-25
    • 2017-01-19
    • 1970-01-01
    • 2017-10-01
    • 2019-12-31
    • 2020-11-06
    相关资源
    最近更新 更多