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)

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.gitCriar 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 serveDetalhes 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 installphp artisan key:generateCriar 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
- 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’

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 migrateCriar 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 utilizadoMé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
-
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

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



- 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


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

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 NomeDaModelphp artisan make:model Curso- Na model, indicar o nome da tabela e o nome das colunas que podem ser cadastradas (formulário)

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

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

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


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

- Exemplo cadastrando valores específicos

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

- 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)


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

-
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


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

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

-
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

-
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


- Paginação com laravel


-
Por padrão, o laravel está na linguagem us. Página abaixo com o passo a passo para instalar o pacote de idioma pt_br do laravel
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)

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

- 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)

- 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

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)

- 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)

- Executar a seed (cadastrar as informações no banco de dados)
php artisan db:seedCRUD - Criar formulário editar curso com Laravel
-
Modificar rota, views e controllers
-
Arquivo de rota routes/web.php
-
Rota editar-curso
![]()
- View index

- Controller método edit

- Rota atualizar-curso
![]()
- View edit

- Controller método update

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
![]()
- Controller método destroy

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



- 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

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

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

- 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

-
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)



Comando para verificar versão Laravel, PHP e Composer do projeto laravel
php artisan aboutHabilitando XDEBUG no Laravel.
- no PHP puro, o xdebug funciona corretamente com o comando xdebug.mode=debug no arquivo php.ini
- já no laravel, foi necessário habilitar todas as opções disponíveis no xdebug.mode, conforme imagem abaixo
- https://stackoverflow.com/questions/71852833/how-to-enable-xdebug-feature

- 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()) }}