如何从$ data Laravel中删除数据

时间:2018-10-28 14:14:10

标签: php arrays laravel forms validation

我正在使用laravel的验证器来创建登录验证,我的登录名有2种类型的用户。一种具有PAR值(客户端),另一种具有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字段。因此,在我的表单中,它们已经包含并以“”形式发送。

2 个答案:

答案 0 :(得分: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中删除字段,也可以使用第一段代码,以避免恶意的用户填写该字段。

答案 1 :(得分:1)

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

  

required_if:另一个字段,...

     

如果 otherfield 字段等于任何,则必须存在正在验证的字段,并且该字段不能为空。

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'
    ]);