Pular para o conteúdo

Introdução ao Laravel

Recriando o projeto das aulas de laravel 10 (Professor Celke)

  • Objetivo: recriar do zero o projeto apresentado nas aulas do curso Laravel 10, professor Celke, para reforçar conteúdo
  • Neste projeto, utilizarei o banco de dados sqlite para facilitar a manipulação dos dados em diferentes computadores, mantendo o bd sempre disponível. Para isso, os arquivos .env e .sqlite serão enviados no repositório github (não serão ignorados nos arquivos .gitignore)

alt text alt text

Copiar a branch do repositório - branch dev-master-do-zero

git clone --branch dev-master-do-zero https://github.com/gabrielzemuner/laravel-meu-projeto.git

Criar o projeto com laravel 10

composer create-project laravel/laravel:^10.0 nome-do-projeto
  • Como criei uma pasta _readme dentro da pasta raiz, não é possível criar um projeto laravel com composer na pasta raiz (composer create*project laravel/laravel:^10.0 .)

  • Nesse caso, criei o projeto com um nome qualquer e depois movi para a pasta raiz (laravel-meu-projeto)

Rodar servidor com laravel

php artisan serve

Detalhes laravel

  • Ao carregar o projeto em outra máquina, necessário rodar os comandos abaixo
  • O arquivo composer.json é o responsável em instalar todas as dependências do projeto
composer install
php artisan key:generate

Criar banco de dados e tabela com migration no laravel

  • Migration -> define a estrutura do banco de dados por meio do código
  • Benefícios: histórico de alterações, controlar versões do banco de dados, portabilidade, rollback (reverter ou desafzer migração ou alteração no banco de dados)

Banco de dados sqlite

  • Criar o banco e configurar o arquivo .env
touch database/database.sqlite

alt text

  • Caso o comando touch não funcione, criar o arquivo com o nome database.sqlite dentro da pasta database

Criar uma migration

  • A migração é como um controle de versão para o banco de dados

  • Recomendado colocar o nome da tabela no plural

php artisan make:migration create_cursos_table
  • Caso precise adicionar alguma coluna, modificar na migration antes de executar o ‘php artisan migrate’

alt text

Executar migrations

  • O comando executa as migrações pendentes (criar, modificar ou excluir tabelas e colunas no banco de dados conforme definido nos arquivos de migração)
php artisan migrate

Criar rotas básicas com Laravel

Rotas recomendadas pela documentação laravel (arquivo web.php):
- Route::get -> listar, visualizar, carregar formulário cadastrar...
- Route::post -> cadastrar
- Route::put -> editar
- Route::delete -> apagar
- Route::patch -> raramente utilizado
- Route::options -> raramente utilizado
Métodos recomendados pela documentação laravel (controllers):
- Método index -> listar
- Método show -> visualizar/detalhes
- Método create -> carregar formulário cadastrar
- Método store -> cadastrar
- Método edit -> carregar formulário com dados
- Método update -> atualizar
- Método destroy -> apagar

alt text

  • Apenas os métodos get são acessados pela URL

  • Criar controller:

php artisan make:controller CursoController
  • Obs: para criar uma controller com todos os métodos necessários para CRUD, executar código abaixo
php artisan make:controller NomeController --resource
  • Criar view (em uma pasta específica, sem ser a raiz das views - resources/views):
php artisan make:view cursos/index
  • Carregar a view na controller

alt text

  • Criado todas as rotas, métodos na controller e views

alt text

alt text

alt text

  • Obs: na definição das rotas, é possível criar um link para acessar as rotas, ex: Route::get(…)->name(‘cursos.listar’). Esse link é utilizado para acessar os links nas views

alt text

alt text

  • É possível criar as rotas de maneira otimizada, conforme abaixo:
  • Obs: não está sendo utilizado no projeto

alt text

CRUD - Cadastrar curso com Laravel no banco de dados

Criar model

  • Model - responsável em manipular os registros no banco de dados
php artisan make:model NomeDaModel
php artisan make:model Curso
  • Na model, indicar o nome da tabela e o nome das colunas que podem ser cadastradas (formulário)

alt text

  • Na view, criar o formulário para receber as informações que serão cadastradas

alt text

  • Dentro do form, incluir o token @csrf e o método utilizado @method=‘POST’

alt text

  • Para receber os dados do formulário, necessário incluir no método store da controller o Request

alt text

alt text

  • Exemplo cadastrando os valores de todos os campos do form e redirecionar usuário para determinada rota.

alt text

  • Exemplo cadastrando valores específicos

alt text

  • Exibir mensagem de sucesso, que foi configurada no método store na controller

alt text

  • A mensagem deve ser configurada na view (por ex: o redirecionamento é para a página visualizar-curso (show.blade.php), necessário configurar nesta view)

alt text

alt text

Trabalhar com colunas timestamp personalizadas (created_at e modified_at para criado e modificado)

  • Definir o nome das colunas na migration ao criar a tabela

alt text

  • Necessário definir na model o atributo $timestamps = false e incluir um método boot explicitando as alterações das colunas e definindo o timestamp (freshTimestamp)

  • Para manter o código DRY (Don’t Repeat Yourself), criado uma model base para trabalhar com colunas personalizadas timestamp. Criado a model BaseTimestamp que herda a classe Model e a model criada deve ser herdada nas models do projeto (até aqui, na model Curso.php)

  • Com isso, evito ter que copiar e colar o código ao trabalhar com as models do projeto

alt text

alt text

CRUD - Listar curso com Laravel no banco de dados

  • A controller recebe os dados do banco (através da model) e passa os dados para a view como um array

alt text

  • Na view, os dados serão exibidos através de um forelse no blade, acessando cada coluna da tabela como um atributo

alt text

  • Manipulação de datas: as colunas padrão (criado e modificado/created_at e modified_at) por padrão cadastram as informações no UTC 0

  • No arquivo config/app.php, ajustar o ‘timezone’ para ‘America/Sao_Paulo’ caso seja necessário cadastrar com base no UTC de brasília/sp

alt text

  • A partir deste momento, as colunas padrão (criado e modificado/created_at e modified_at) cadastram as informações com base no UTC passado (ex foto acima, utc -3)

  • Obs: Deixei como padrão o banco de dados salvar as datas como UTC (padrão) e exibir nas views o fuso horário de brasília/sp

alt text

alt text

  • Paginação com laravel

alt text

alt text

CRUD - Visualizar detalhes do curso com Laravel

  • Modificar rota, controller e view

  • No arquivo de rotas (web.php), modificar a rota get, acrescentando um parâmetro do id do curso (obs: esse parâmetro não necessariamente precisa ter Id conforme imagem {cursoId}, pois nas aulas seguintes ele foi modificado para apenas {curso}, porém mantendo o número do id sendo passado pela URL para acessar a rota)

alt text

  • Na controller, receber a informação de id do banco de dados e passar para a view como um array

alt text

  • Na view visualizar/detalhes do curso (show), carregar as informações referentes a página acessada, recebidas no método show na Controller (imagem anterior)

alt text

  • Na view listar curso (index) (onde precisa aparecer um link com a tag para clicar em cada curso de acordo com o id referente), passar para a rota do visualizar curso o id referente, recebidos do método index na Controller

alt text

Criar seeders

  • Popular o banco com dados de teste
php artisan make:seeder CursoSeeder
  • No arquivo criado database/seeders/CursoSeeder.php, passar os dados de uma model existente, com as colunas da tabela (não é necessário passar as colunas de timestamp - criado/created_at e modificado/modified_at)

alt text

  • Antes de executar a seed, no arquivo database/seeders/DatabaseSeeder.php, passar para a função call a(s) classe(s) para cadastrar informações no banco de dados (ex: CursoSeeder)

alt text

  • Executar a seed (cadastrar as informações no banco de dados)
php artisan db:seed

CRUD - Criar formulário editar curso com Laravel

  • Modificar rota, views e controllers

  • Arquivo de rota routes/web.php

  • Rota editar-curso

alt text

  • View index

alt text

  • Controller método edit

alt text

  • Rota atualizar-curso

alt text

  • View edit

alt text

  • Controller método update

alt text

CRUD - Apagar curso com Laravel no banco de dados

  • Apagar informações através do formulário, ao invés de links. Mais seguro

  • Rota apagar-curso

alt text

  • Controller método destroy

alt text

  • Views index, show, edit + incluir alerta para confirmar o delete

alt text

alt text

alt text

  • Ajustado sessão nas views restantes (index e edit)

Adicionar coluna na tabela com migration

php artisan make:migration alter_cursos_add_preco_table
  • Será criado um arquivo migration acima, dentro da pasta database

  • Incluir no arquivo as alterações necessárias no método up. Nesse caso, incluir uma coluna ‘preco’ com valor default 0 na tabela ‘cursos’

  • Acrescentado também o método down, caso seja necessário reverter a migration

alt text

  • Executar a migration
php artisan migrate
  • Executar rollback (desfazer última migration), pois a nova coluna ‘preco’ ficou depois das colunas ‘criado’ e ‘modificado’

alt text

php artisan migrate:rollback
  • Acrescentar a coluna ‘preco’ ao lado da coluna ‘nome’

alt text

  • Executar a migration novamente para ajuste (***OBS: o banco de dados sqlite não aceita a cláusula/método after. Necessário ajustar manualmente em um sistema de gerenciamento de bancos - ex: DB Browser SQLITE)
php artisan migrate
  • Caso novas colunas sejam acrescentadas no banco, é necessário incluir as novas colunas na Model, se não os valores não serão cadastrados no banco

alt text

  • Ajustado as views, para carregar a informação da nova coluna

  • Além da model, necessário ajustar no método update, store da Controller (ou qualquer lugar a mais onde seja necessário passar as colunas necessárias para alteração)

alt text

alt text

alt text

Comando para verificar versão Laravel, PHP e Composer do projeto laravel

php artisan about

Habilitando XDEBUG no Laravel.

alt text

  • para debugar com var_dump igual o php puro, necessário passar o nome da variável e o método getAttributes()
{{ var_dump($course->getAttributes()) }}