0

我正在使用 laravel 的验证器来创建登录验证,并且我的登录名有 2 种类型的用户。一个带有价值 PAR(客户端),一个带有 PRO(专业)。如果选中单选按钮 pro,它会在我的表单中添加 3 个更多字段。$data当我是客户时,我该如何删除这些字段?这是我测试的:

// VERIFICATION OF THE USER'S STATUS
    if($data['status'] == 'PAR') {
        return Validator::make($data, [
            // CLIENT PART
            'name' => 'required|string|max:255',
            'surname' => 'required|string|max:255',
            'email_user' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'gender' => 'required|string',
            'birth' => 'required|date',
            'address' => 'required|string|max:255',
            'city' => 'required|string|max:255',
            'pc' => 'required|numeric|digits_between:4,5',
            'status' => 'required|string|max:255',
        ]);
    }

    else if($data['status'] == 'PRO') {
        return Validator::make($data, [
            // PROFESSIONNAL PART
            'name' => 'required|string|max:255',
            'surname' => 'required|string|max:255',
            'email_user' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'gender' => 'required|string',
            'birth' => 'required|date',
            'address' => 'required|string|max:255',
            'city' => 'required|string|max:255',
            'pc' => 'required|numeric|digits_between:4,5',
            'status' => 'required|string|max:255',

            'phone' => 'required|numeric',
            'license' => 'requiredmimes:jpeg,pdf,png',
            'urssaf' => 'required|mimes:jpeg,pdf,png'
        ]);
    }

然后我将对 User::create 函数做同样的事情。我正在使用 JS 来显示或不显示电话/许可证/urssaf 字段。所以在我的表格中,它们已经包含在表格中并作为“”发送。

4

2 回答 2

1

您可以使用 laravel 中的(array_except辅助函数)[ https://laravel.com/docs/5.7/helpers#method-array-except]在某些if子句中将其删除:

$data = array_except($data, ['phone', 'license', 'urssaf']);

但实际上看起来您需要从验证规则中删除项目,而不是从数据中。

由于这两种情况的规则几乎相同,因此您可以执行以下操作:

$rules = [ 
    /** Common rules here */
]

if ($data['status'] == 'PRO') {
    $rules = array_merge($rules, [
    /** Specific rules here */
    ]
}

return Validator::make($data, $rules);

这将避免您需要重复自己。

如果您还想从 $data 中删除字段,也可以使用第一段代码,以避免恶意用户填写该字段。

于 2018-10-28T14:30:15.380 回答
1

如果您阅读文档,您会发现:

required_if:另一个字段,...

如果anotherfield字段等于任何,则验证中的字段必须存在且不为空。

https://laravel.com/docs/5.6/validation#rule-required-if


    return Validator::make($data, [
        // PROFESSIONNAL PART
        'name' => 'required|string|max:255',
        'surname' => 'required|string|max:255',
        'email_user' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'gender' => 'required|string',
        'birth' => 'required|date',
        'address' => 'required|string|max:255',
        'city' => 'required|string|max:255',
        'pc' => 'required|numeric|digits_between:4,5',
        'status' => 'required|string|max:255',

        'phone' => 'required_if:status,pro|numeric',
        'license' => 'required_if:status,pro|mimes:jpeg,pdf,png',
        'urssaf' => 'required_if:status,pro|mimes:jpeg,pdf,png'
    ]);
于 2018-10-29T01:12:53.097 回答