【问题标题】:How to ignore validation of some fields with condition in laravel如何忽略对laravel中某些具有条件的字段的验证
【发布时间】:2017-08-10 16:52:42
【问题描述】:

我有一个带有以下规则的 OrderRequest:

public function rules()
    {
        return [
            //
            'surname' => 'required|max:255',
            'name' => 'required|max:255',
            'city' => 'required|max:255',
            'post_office'=>'required|max:255',
        ];
    }

如果请求有 user_id,我需要忽略姓氏和姓名验证

目前这样做:

if ((Input::has('user_id'))) {
            return [
                //
                'city' => 'required|max:255',
                'post_office'=>'required|max:255',
            ];
        }
        return [
            //
            'surname' => 'required|max:255',
            'name' => 'required|max:255',
            'city' => 'required|max:255',
            'post_office'=>'required|max:255',
        ];
    }

但是我可以做得更好吗?怎么做?

【问题讨论】:

    标签: php laravel validation request


    【解决方案1】:

    我想使用三元运算符和request() 助手会是更好的方法:

    'surname' => request()->has('user_id') ? '' : 'required|max:255',
    

    【讨论】:

    • 我在getValidatorInstance中找到了一些关于创建$validator->sometimes(...)的信息。它会解决我的任务吗?如果是,它不是更好的解决方案吗?或者它比你的更复杂和不必要?
    • 是的,正如 Alexey 所说,在较新的 Laravel 项目中使用 Request 而不是 Input。 Input 是请求的 别名,它们从 service container 解析相同的依赖关系,但在较新的 Laravel 文档中没有提到 Input,并且将来可能会被删除。如果您要升级 Laravel,则必须将所有 Input 替换为 request,这将是不幸的;)
    • 你激励我str_replace all required 在使用 PATCH 请求时为空字符串。
    【解决方案2】:

    由于user_id 在您的请求中,您可以使用required_without。这要求验证中的字段存在且不为空在任何其他指定字段不存在时。

    return [
                //
                'surname' => 'required_without:user_id|max:255',
                'name' => 'required_without:user_id|required|max:255',
                'city' => 'required|max:255',
                'post_office'=>'required|max:255',
            ];
    

    所以现在surnamename 必须存在,并且只有当 user_id 不存在时才为空。


    正如我在对 Alexey 的评论中所说的:

    在较新的 Laravel 项目中使用 Request 而不是 InputInput 是请求的 alias,它们从 服务容器 解析相同的依赖关系,但在较新的 Laravel 文档中没有提到 Input,可能会在未来。如果您要升级 Laravel,则必须将所有 Input 替换为 request,这将是不幸的;)

    您可以使用request() helper 函数或将 Helper 合约或 Facade 注入到构造函数/方法中。

    public function __construct(Request $request)
    {
        $this->request = $request;
    }
    

    【讨论】:

    • 我认为 required_without 是解决我问题的最佳方法。谢谢! (:
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多