Как удалить данные из $ data Laravel - PullRequest
0 голосов
/ 28 октября 2018

Я использую валидатор 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.Таким образом, в моей форме они уже включены и отправлены как "" в форме.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если вы прочитаете документацию, вы найдете следующее:

required_if: anotherfield , value , ...

Проверяемое поле должно присутствовать и не быть пустым, если поле 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'
    ]);
0 голосов
/ 28 октября 2018

Вы можете использовать (array_except вспомогательную функцию) [https://laravel.com/docs/5.7/helpers#method-array-except] из laravel, чтобы удалить его внутри некоторого предложения 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, чтобы избежать заполнения этого поля злонамеренным пользователем.

...