Form request no parent
Boa noite, eu tenho uma duvida que não consigo achar uma solução pratica. Eu tenho um controller base que implementa apenas os metodos de crud e todos os meus controllers extende desse controller base.
Cada um dos meus controllers tem um FormRequest, a minha duvida é: Como todos os meus controllers extende da classe base e a implementação de crud esta na classe base, como eu passo esse form request para a classe base para que haja validação apenas nos metodos de insert e update?
OBS: Passando pelo contrutor todos os metodos da classe base sofrem a validação e metodos como o index que apenas lista dados, não deve ser validado, então alem de passar para o pai preciso que apenas insert e update tenham validação.
Tentei tambem com sobrecarga, dando uma especie de override em cima desses dois metodos, porem o php não permite que o override altere a assinatura dos metodos.
Olá, Davisson!
Tudo bem?
Não é possível usar Form Request em uma classe parent, isso porque o comportamento padrão é quando cria um objeto automaticamente já invoca os métodos que fazem a validação.
O que você pode fazer é criar uma trait, que centraliza alguns comportamentos padrões.
Entendi! Eu fiz de uma forma que aparentemente funciona, chamo o FormRequest no contrutor do meu controler dessa forma tanto o controller quanto o parent são interceptados pelo FormRequest, e dentro do FormRequest eu tenho uma validação de cada verbo http, ai sim eu valido somente post e put.
switch ($this->method()) {
case 'POST':
return [
"Regra de validação"
];
break;
case 'PUT':
return [
"Regra de validação"
];
break;
default:
return [];
break;
}
Tem alguma implicação negativa essa tecnica?
Entendi a ideia.
Só acho que fica um pouco de lógica de mais no controller. Hoje eu recomendo usar uma Trait;
Certo, mas como não é possivel passar uma instancia de FormRequest como eu consegiria validar os metodos de uma Trait?
No caso a Trai centralizaria apenas o que pode ser reaproveitado, como atributos e etc.
Para controller que devem ser bem enxutos, eu não crio apenas uma Trait para eles, e implemento as funcionalidades manualmente. Agora, você pode sim criar uma classe de Serviço para poder centralizar responsabilidades e diminuir a quantidade de códigos, aumentando assim a produtividade. Recomendo trabalhar com repositories.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!