[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Davisson Charles
Criador Davisson Charles 10/03/2020

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?

Criador Davisson Charles 10/03/2020

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.

Davisson Charles
Manager Carlos Ferreira 10/03/2020

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.

Carlos Ferreira
Criador Davisson Charles 10/03/2020

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?

Davisson Charles
Manager Carlos Ferreira 10/03/2020

Entendi a ideia.

Só acho que fica um pouco de lógica de mais no controller. Hoje eu recomendo usar uma Trait;

Carlos Ferreira
Criador Davisson Charles 10/03/2020

Certo, mas como não é possivel passar uma instancia de FormRequest como eu consegiria validar os metodos de uma Trait?

Davisson Charles
Manager Carlos Ferreira 10/03/2020

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.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!