【问题标题】:How to remove data from $data Laravel如何从 $data Laravel 中删除数据
【发布时间】:2019-04-01 14:44:02
【问题描述】:

我正在使用 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 字段。所以在我的表单中,它们已经包含并在表单中发送为 ''。

【问题讨论】:

标签: php arrays laravel forms validation


【解决方案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'
    ]);

【讨论】:

    【解决方案2】:

    您可以使用 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 中删除字段,也可以使用第一段代码,以避免恶意用户填写这些字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多