Редактирование реестра перед тем, как пройти через правила валидации в Laravel


Меня form , регистрации клиентов. В поле регистрационного CPF, я формата данных с помощью jQuery, вставив знаки препинания между цифрами. Бывает, что, вводя это форматирование, мои правила Requets не работают должным образом.

ClientRequest.php

public function rules()
{    
    return [

            'user_create_id' => 'required|integer',
            'marital_status_id' => 'required|integer',
            'people_type' => 'required',
            'name' => 'required|max:100|min:10',
            'cpf' => 'required|max:14|min:14|unique:clients',
            'rg' => 'max:13|min:6',
            'data_nasc' => 'required',
            'phone' => 'required|min:10|max:15',
            'email' => 'min:10|max:225|email',
            'has_credit_card' => 'required',
            'has_current_account' => 'required',
    ];
}

, Где это правило CPF unique:clients, то же не работает, потому что он получает значение с больше и дефис, так и при поиске в базе какой-то CPF равно в курсе, никогда не увидите, так как в момент сохранения в базе я забираю эти элементы.

Имеет, как удалить их на собственные правила проверки?

Author: novic, 2016-11-25

1 answers

Имеет две формы пригодными для работы с проверкой с этой проблемой:

1) Создание Service Provider Проверки Адаптированная

Создайте Service Provider команда:

php composer make:provider UniqueDocumentServiceProvider

В папке app\Providers откройте файл UniqueDocumentServiceProvider.php и поместите код ниже:

<?php namespace App\Providers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;

class UniqueDocumentServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //Criação de uma nova validação  
        \Validator::extend('unique_cpf', function ($attribute, 
                                                   $value, 
                                                   $parameters, 
                                                   $validator) {

            $value = str_replace(['.','-'],'', $value);
            return ((DB::table('clients')
                       ->where('cpf','=', $value)
                       ->count()) == 0 );

        });

        //Mensagem da validação customizada
        \Validator::replacer('unique_cpf', function ($message, 
                                                     $attribute, 
                                                     $rule, 
                                                     $parameters) {

            return 'CPF existente';

        });
    }    
    public function register()
    {
    }
}

В Этом Service Provider будет сделан Validator индивидуальному заказу, куда будет возможность отформатировать информации, на время проверки, и поэтому устранить проблему другой проверки, которая берет чисто значение, которое будет передаваться по форме. При создании этого файла все эти сведения, должен быть зарегистрирован в файле app\config\app.php ключ providers, например:

'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        .....

        App\Providers\UniqueDocumentServiceProvider::class

    ],

Эта запись идет в файл ClientRequest.php и замените unique:clients unique_cpf:

public function rules()
{    
    return [

            'user_create_id' => 'required|integer',
            'marital_status_id' => 'required|integer',
            'people_type' => 'required',
            'name' => 'required|max:100|min:10',
            'cpf' => 'required|max:14|min:14|unique_cpf',
            'rg' => 'max:13|min:6',
            'data_nasc' => 'required',
            'phone' => 'required|min:10|max:15',
            'email' => 'min:10|max:225|email',
            'has_credit_card' => 'required',
            'has_current_account' => 'required',
    ];
}

, эти изменения будут иметь ожидаемый эффект.

2), используя ручной процесс, прямой метод Controller

Используйте Request (вместо ClientRequest) , и, прежде чем проверить \Validator::make снимайте очки и след ее cpf:

public function store(Request $request)
{
    $rules = [
      'name' => 'required|max:100|min:10',
      'cpf' => 'required|max:14|unique:pessoas'
    ];

    $value = $request->except('cpf');

    //removendo pontos e traço e criando a chave para validação.
    $value['cpf'] = str_replace(['.','-'], '', $request->input('cpf'));

    //Validação ...
    $validator = \Validator::make($value, $rules);

    //Se falhar retorne com os erros !!!
    if ($validator->fails())
    {
        return redirect('pessoa')
            ->withErrors($validator)
            ->withInput();
    }

    //Se passar desse if os dados são válido faça aqui as outras operações
    return $request->all();
}

Примечание: метод store, например, подчеркивая, как будет выглядеть код

Так что эти способы сделать это проверка, что дано, нужно, прежде чем быть проверены, иметь собственный формат.

Фильмография:

 4
Author: novic, 2020-06-11 14:45:34