Oi Mario! Tudo bem?
Para casos onde a validação depende de consultas ao banco de dados ou de chamadas a APIs externas, você pode utilizar o FormRequest
para definir as regras básicas de validação e, em seguida, adicionar lógica personalizada no próprio controlador ou dentro do FormRequest
.
Como um exemplo Prático:
Criar o FormRequest
:
Primeiro, você cria um FormRequest
para as validações básicas.
php artisan make:request CustomFormRequest
Adicionar Regras Básicas:
Dentro do CustomFormRequest
, você pode adicionar as regras básicas de validação.
public function rules()
{
return [
'campo1' => 'required|string|min:3',
// outras regras básicas
];
}
Adicionar Lógica Personalizada:
Para adicionar lógica que depende de consultas ao banco ou chamadas a APIs, você pode usar o método withValidator
dentro do FormRequest
.
use Illuminate\Validation\Validator;
public function withValidator(Validator $validator)
{
$validator->after(function ($validator) {
if ($this->campo1RequerValidacaoEspecial()) {
$validator->errors()->add('campo1', 'Erro personalizado baseado em regra de negócio.');
}
});
}
protected function campo1RequerValidacaoEspecial()
{
// Exemplo de consulta ao banco
$registro = \DB::table('tabela')->where('campo', $this->campo1)->first();
return $registro !== null;
// Exemplo de chamada a API externa
// $response = Http::get('https://api.externa.com/validar', ['param' => $this->campo1]);
// return $response->json()['valido'] === false;
}
No seu controlador, você pode continuar utilizando o FormRequest
normalmente.
public function store(CustomFormRequest $request)
{
// Lógica para salvar os dados
}
Dessa forma, você centraliza a lógica de validação no FormRequest
, mantendo o controlador mais limpo e organizado.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.