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 ✓.