Редактирование реестра перед тем, как пройти через правила валидации в 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 равно в курсе, никогда не увидите, так как в момент сохранения в базе я забираю эти элементы.
Имеет, как удалить их на собственные правила проверки?
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
, например, подчеркивая, как будет выглядеть код
Так что эти способы сделать это проверка, что дано, нужно, прежде чем быть проверены, иметь собственный формат.
Фильмография: