Criando um CRUD básico com Laravel 5.4

Victor Hugo Rocha
Training Center
Published in
4 min readMay 8, 2017

Olá, DevZ.

Nesse post eu vou partir do princípio de que você já sabe começar o seu projeto em Laravel e está querendo dar os seus primeiros passos com desenvolvimento web. Algum tempo atrás eu escrevi dois textos um sobre Migrations e outro sobre Faker & Factory que podem complementar o conteúdo dessa publicação.

O Laravel é um framework MVC, Model-View-Controller, que é um dos vários padrões de design de software, temos também o MVW, MVVM mas vamos nos focar no padrão MVC que possuem como fundamento a separação de conceitos e a reusabilidade de código dentro do projeto. Esse é um conceito que excede o Laravel e é usado por diversas linguagens de programação e frameworks então um conhecimento sólido desse design patterns é um bom começo para utilizar qualquer ferramenta.

Vamos começar pela migration. Como você já sabe ela é como um controle de versão do seu banco de dados e permite que você adicione tabelas e colunas no seu banco sem muita dificuldade. Para criar a sua migration você deve rodar o comando artisan abaixo.

php artisan make:migration create_nametable_table
php artisan make:migration create_products_table

Na function up eu estou criando uma tabela products com os campos id, name, description, quantity e price. Eu explico o que são os campos timestamps e softDeletes aqui. A função down dropa a tabela criada anteriormente. É interessante notar que eu posso definir coisas simples desde dizer que o campo description pode ser nulo até criar chaves primárias de maneira fácil como mostra a documentação.

Agora vamos falar da Model. O Laravel possui integrado o Eloquent ORM que é uma forma mais bonita e abstrata de interagir com o seu banco de dados. Cada tabela de banco de dados tem um Model correspondente que é usado para interagir com essa tabela. Para criar a sua Model basta rodar o seguinte comando no terminal. Se você passar a Flag -m é criada uma migration referente a Model.

php artisan make:model NameModel
php artisan make:model NameModel -m

No meu caso a minha model Product é bem simples e possui três variáveis protegidas: fillable, guarded e table. A variável fillable define quais os campos que podem ser inseridos pelo usuário do sistema no Banco, o campo guarded protege os campos de inserções. Ele impede que alguém insira dados em alguns campos da nossa tabela.

Mesmo que não seja possível realizar essas inserções através do Front-end é importante que de alguma forma protejamos esses campos de possíveis vulnerabilidades que possam ser explorados por usuários mal intencionados. Agora que definimos na Model qual campos podem ser preenchidos pelo usuário podemos trabalhar na nossa CRUD.

Se você gostou do Eloquent você também pode usá-lo em um projeto que não seja Laravel. Você pode encontrar mais informações sobre isso na documentação.

Agora vamos falar da Controller, elas servem para agrupar toda a lógica das suas requisições em uma única classe. Você pode ver abaixo o nosso arquivo referente a CRUD de Produtos que estamos desenvolvendo, 60 linhas é relativamente grande, se deixássemos todo esse código direto nas nossas rotas seria um caos, os controllers nos ajudam a organizar nosso projeto.

php artisan make:controller NameController

Dentro da Controller você pode ver que criamos as funções referentes ao que uma CRUD deve fazer. Essas funções devem ser chamadas nas rotas como métodos da sua controller. Há duas formas de se fazer isso.

Nas versões anteriores do Laravel (4.2.*) você precisava criar uma rota para cada função da sua CRUD. Nela você passava como segundo parâmetro a sua Controller e o método correspondente aquela rota. Como você pode perceber também é possível passar um middleware para a Rota, nesse exemplo apenas os usuários autenticados tem acesso a essa rota.

Se você encontrar algum problema em que você precise tratar uma rota especifica você ainda pode fazer dessa maneira mas na versão 5.4 e superiores há um facilitador do Laravel, você pode fazer as mesmas 9 linhas do código anterior em apenas uma.

Com essa declaração de rota única você deixa para que o Laravel crie todas as rotas para a variedade de ações do ProductController, dessa maneira, diferente do exemplo anterior, ele define os verbs PUT/PATCH para Update e DELETE para Delete da sua CRUD de Produtos.

Você também pode fazer isso direto do terminal caso crie o controller dessa maneira. Note que além de definir que aquele é um Resource Controller dessa maneira você também indica qual o Model correspondente aquele Controller.

php artisan make:controller NameController --resource --model=NameModel

Se você chegou até aqui não esqueça de deixar o seu ❤ e/ou um comentário. I ❤ seu Feedback. Se você tem interesse por Bots ou gostou do meu texto você pode ler algum dos meus outros artigos, recomendo:

  1. Telegram Bot — Como desenvolver seu Bot com Javascript e Heroku
  2. Docker — Dockerhub, pull e push nas suas imagens
  3. TDD — Test Driven Development

See ya!

--

--