Uma das coisas que sempre combatemos em code smell “por default” é a capacidade de inibir código duplicado. Sempre temos que pensar em uma forma de não haver duplicidade de código. Imagine o seguinte cenário no Laravel (nas actions produtos.store e produtos.update):
$request->validate([ 'nome' => ['required', 'min:3'] ]);
Imagine que o nome do produto precisa passar por dois momentos de validação, o de store e o de update (nas actions store/update respectivamente). Para termos essa validação iríamos copiar esse código em ambas actions e funcionaria. Mas para dar manutenção nesse código haveriam dois lugares para tal, sem contar que é código repetido (veja o link que falo sobre messagebag e $errors no Laravel). É notório que á code smell ali se replicarmos aquela validação de exemplo e para sanar isso a forma correta é criar um FormRequest NOSSO e aí sim trabalhar nele para aplicar essa validação em especial. Vamos criar isso com artisan:
no console digite:
php artisan make:request ProdutosFormRequest
O Laravel sozinho vai criar a classe ProdutosFormRequest dentro da pasta /var/www/laravel/app/Http/Requests/ProdutosFormRequest.php
Dentro dele precisamos nos ater a dois pontos, o de permitir as requisições sem restrição e as regras de filtros dessas requisições, no caso, em primeiro passo precisamos entrar em:
public function authorize() { //precisamos mudar o authorize para TRUE se quisermos que todos //estejam autorizados a usar esse formrequest //return false; return true; } Isso já nos garantirá que o user vai poder fazer essa request sem problemas e como essa classe herda tudo da FormRequest a gente não precisa se preocupar com a compatibilidade dos membros dessa classe porque tudo vai funcionar armoniosamente! O segundo ponto em questão é o filtro do form que está logo abaixo: public function rules() { return [ 'nome' => ['required', 'min:3'] ]; } Por padrão ele vem com // no corpo do return [], basta inserirmos a filtragem que queremos. E em nossas actions store/update ao invés de deixarmos Request $request como argumentos dos métodos store/update a gente coloca nosso form request: public function update(CadastroProdutos $produtos, ProdutosFormRequest $request) { e public function store(ProdutosFormRequest $request) { Resolvido, sanamos code smell e ainda otimizamos o nosso código <3.
[…] campo específico no sistema (form em si) de forma mais controlada. Eu deixei pronto em um artigo como evitar code smell no Laravel na parte de validações, isso já mostra algo diferente na parte de validações e pode nos acompanhar e otimizar nosso […]