Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

4 Framework Laravel Final

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 239

Desenvolvimento de

Aplicações Web
Prof. Dr. Guilherme A. Madalozzo
Laravel
• Programadores não querem se preocupar com infraestrutura

• Então, surgiram os frameworks


• Nos ajudam a agilizar o processo de desenvolvimento
• Deixa o projeto bastante organizado
• Evita repetições de código

• Laravel é um framework PHP extremamente produtivo com


arquitetura MVC

• Está cada vez mais popular e sendo utilizado no mercado


Laravel

2015
- O Laravel é framework mais
utilizado do mercado
Laravel
• O Laravel possui uma interface de linha de comando
• Artisan (artesão)

• Através do Artisan podemos realizar diversas ações em nossas aplicações


• Configuração de ambiente
• Verificar rotas (veremos a seguir o que são) existentes
• Interagir com a aplicação
• Criar diversos tipos de arquivos
• Migrations (banco de dados)
• Controllers
• Models
Laravel
• Para a criação de interface gráfica o Laravel utiliza uma ferramenta de
template
• Blade

• Blade traz um quantidade grande de ferramentas que ajudam na criação de


bonitas interfaces de forma rápida
Laravel
• Para a comunicação com bancos de dados o Laravel usa uma implementação
chamada Eloquent ORM (Mapeador Relacional de Objetos)

• O Eloquent ORM é uma ferramenta com funcionalidades que facilitam a


inserção, atualização, busca e exclusão de registros diretamente no banco de
dados
Laravel
Pré-requisitos do Laravel

• PHP na versão 5.6 ou superior


• Habilitar extensões no php.ini
• OpenSSL PHP
• PDO PHP
• Mbstring PHP
• Tokenizer
• Composer
• Node.js e NPM
Fazer o tutorial de instalação e configuração dos requisitos do
Laravel
Tutorial está na intranet
Laravel na prática!
Laravel na Prática
• Vamos iniciar o desenvolvimento de uma aplicação web
(futuramente, se der tempo, essa aplicação será migrada para
mobile)

• A aplicação em questão é um sistema de controle de hábitos


• Neste sistema controlaremos os hábitos do nosso dia-a-dia
• Com ele, vamos saber o que estamos deixando de fazer
• Com ele, vamos saber quais novos hábitos estamos construindo
• Toda vez que o usuário fazer algo, marcará no sistema
• Com isso, teremos um histórico dos hábitos
Laravel na Prática
• O sistema conterá, basicamente, três cadastros
• Cadastro de hábitos
• Cadastro de histórico
• Cadastro de usuários
Laravel na Prática
• O sistema conterá, basicamente, três cadastros
• Cadastro de hábitos
• Cadastro de histórico
• Cadastro de usuários

• Cadastro de hábitos
• Nome
• Descrição
• Tipo de hábitos
• Dia de início de controle
Laravel na Prática
• O sistema conterá, basicamente, três cadastros
• Cadastro de hábitos
• Cadastro de histórico
• Cadastro de usuários

• Cadastro de hábitos
• Objetivo (quantidade que deseja fazer)
• Quantidade mensal
• Quantidade semanal
• Quantidade díária
Laravel na Prática
• O sistema conterá, basicamente, três cadastros
• Cadastro de hábitos
• Cadastro de histórico
• Cadastro de usuários

• Cadastro de histórico
• Data
• Hora
• Local
Laravel na Prática
• O sistema conterá, basicamente, três cadastros
• Cadastro de hábitos
• Cadastro de histórico
• Cadastro de usuários

• Cadastro de usuários
• O Laravel possui um mecanismo de autenticação automatizado
• Veremos na sequência do desenvolvimento da aplicação
Etapa 1
Iniciando o projeto MeuHabito.Com
Entendendo a estrutura de pastas
MeuHabito.Com
• Como vimos no tutorial, criar um projeto Laravel é simples
• Utilizaremos o cmder para isso

$ composer create-project --prefer-dist laravel/laravel meu_habito

https://github.com/guimadalozzo/meu_habito
MeuHabito.Com
• Ao criarmos um projeto, o Laravel cria toda a
arquitetura

• Podemos notar que o diretório meu_habito está


estruturado
MeuHabito.Com
• A pasta app é a principal pasta do projeto

• É onde vamos desenvolver a aplicação

• A subpasta Console para criar comando (se necessário)


• Artisan

• A subpasta Exceptions responsável pelo tratamento de erros


do Laravel
MeuHabito.Com
• A pasta app é a principal pasta do projeto

• É onde vamos desenvolver a aplicação

• A subpasta HTTP conterá


• Controllers  gerenciamento das ações

• Middleware  recurso importante para a web, onde podemos


interceptar a requisição do usuário e analisa-la antes de devolver
uma resposta
MeuHabito.Com
• A pasta app é a principal pasta do projeto

• É onde vamos desenvolver a aplicação

• A subpasta Providers conterá os provedores de serviços da


aplicação  gerenciadores de rotas, autenticação,
notificações real-time, etc

• O arquivo user.php é o Model de usuário


MeuHabito.Com
• A pasta bootstrap é responsável por gerenciar os
pacotes de autoload
MeuHabito.Com
• A pasta config é a pasta para a configuração da nossa
aplicação Laravel

• Autenticação
• Banco de dados
• BroadCasting (notificações RT)
• Emails
• Sessões
• Upload de arquivos
• Serviços de terceiros
MeuHabito.Com
• A pasta Database é a pasta onde criaremos as
migrations para versionamento da base de dados

• Migrations são arquivos de código que representam


operações na estrutura do banco de dados
MeuHabito.Com
• A pasta Public é a pasta onde contém o index.php
• Para iniciar a aplicação

• Também contém o .htaccess para passar


configurações ao servidor apache
MeuHabito.Com
• A pasta Resources é a pasta contém algumas
configurações front-end

• Podemos trabalhar nossa aplicação em diferentes


linguagens (inglês é o padrão)

• Contém a pasta Views onde terão nossos templates da visão


da aplicação
MeuHabito.Com
• A pasta Routes é a pasta onde nos preocuparemos com as
rotas da aplicação

• Rotas são definições de qual Controller será acessado a partir da


informação da URL

• Podemos usar comando simples nas rotas, conforme requisição


do http informado
• Route::get();
• Route::post();
• Route::put();
• Route::delete();
• Route::any();
MeuHabito.Com
• A pasta Routes é a pasta onde nos preocuparemos com
as rotas da aplicação

• Através das rotas podemos parametrizar a URL, por exemplo


• No site da netshoes eu quero ver os tênis de corrida, masculino e
tamanho 44

• Notamos 3 parâmetros
• Categoria (running), Gênero (masculino), Tamanho (tamanho-44)
MeuHabito.Com
• A pasta Routes é a pasta onde nos preocuparemos com
as rotas da aplicação

• Então, pode-se dizer que as rotas são as URLs que o usuário


utiliza para acessar as páginas dentro do sistema

• O programador pode controlar e personalizar estas rotas


para que fique mais amigável aos usuários
MeuHabito.Com
• A pasta Routes é a pasta onde nos preocuparemos com
as rotas da aplicação

• No Laravel configuramos as rotas no arquivo web.php

• O console.php é o arquivo para configurar rotas do artisan

• Para notificações RT usamos o channels.php

• O arquivo api.php faz rotas dos middlewares


MeuHabito.Com
• Na pasta Storage o Laravel mantém um histórico de
logs da aplicação

• Também, vai armazenar as caches e sessões do sistema


MeuHabito.Com
• Na pasta Test o Laravel possibilita que trabalhemos
com o PHPUnit para realização de testes unitários de
nossas classes
MeuHabito.Com
• Na pasta Vendor contém todos os pacotes de terceiros
que usamos na nossa aplicação

• Nunca deve ser alterada


Etapa 2
Configurando a base de dados do MeuHabito.Com

Para executar projeto:


cd meu_habito
php artisan serve
Configuração da Base de Dados
• Por padrão o Laravel possibilita o uso dos seguintes
gerenciadores de banco de dados

• Sqlite
• MySQL
• PostgreSQL
Configuração da Base de Dados
• Por padrão o Laravel possibilita o uso dos seguintes
gerenciadores de banco de dados

• Abrindo o arquivo config/database.php


• Veremos que os três gerenciadores de banco de dados estão
configurados no array de conexões

• Podemos notar, também, que existe uma conexão ‘default’


Configuração da Base de Dados
• Por padrão o Laravel possibilita o uso dos seguintes
gerenciadores de banco de dados

• Para o sistema MeuHabito.com usaremos o MySQL


Configuração da Base de Dados
• Podemos notar que alguns atributos contém a definição
através da função env(...)
Configuração da Base de Dados
• Esta função busca dados vindos do arquivo .env
(raíz do projeto)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Configuração da Base de Dados
• Mudaremos o .env adicionando as configurações do
banco de dados de nossa aplicação

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=meuhabito
DB_USERNAME=root
DB_PASSWORD=root1706
Etapa 3
Configurando rotas
Configuração de Rota
• O Kernel do Laravel tem a função de inicializar seus
principais componentes para podermos tratar os requests
de usuários

• Uma forma para o tratamento de requests são as rotas


• Temos diferentes maneiras de manipularmos as rotas
Configuração de Rota
• Quando a rota está definida e ocorre um match com a
requisição do usuário, a função da rota é executada

• O arquivo de configuração das rotas é o


routes/web.php
Configuração de Rota
• A rota padrão do projeto é a rota do welcome

• Vamos manter ela!!


Configuração de Rota
• Vamos criar uma rota do tipo GET  chamada “habitos”

• Inicialmente esta rota irá apresentar uma mensagem em tela


Configuração de Rota
• Quando alguém acessar o /habitos, via método GET, o Laravel
retornará a mensagem configurada na rota

• Porém, muitas vezes queremos e devemos fazer com que uma


rota execute uma função de um “terceiro”
• Neste ponto entra o Controller!
Configuração de Rota
• Já tivemos contado com controller em outros momentos

• Por ora, é importante lembrar que o controller é uma classe que


possui métodos

• Sendo assim, uma rota pode encaminhar a requisição (no caso,


get) para uma determinada classe (controller) e para um
determinado método
Configuração de Rota
• Vamos alterar nossa rota de habitos para encaminhar a
requisição ao método index do HabitosController

• Se fizermos uma requisição para hábitos, dará erro pois o


controlador não está criado
Configuração de Rota
• Vamos alterar nossa rota de habitos para encaminhar a
requisição ao método index do HabitosController

• Dessa maneira, estamos querendo dizer


• Quando um request para URL /habitos, através do método HTTP GET,
for solicitado
• Executaremos o método index da classe HabitosController
Etapa 4
Criando o Controller
Controlador
• O Controller é a camada conhecida como intermediador

• Ele recebe uma requisição


• Analisa as necessidades da requisição
• Pode chamar os models para consultar ou persistir dados no BD
• Depois, deve definir como a resposta será retornada

• Inicialmente, vamos criar o controller e no método index


vamos retornar um HTML como resposta
Controlador
• Muitas coisas no Laravel são feitas automáticas
• A criação do controller é uma delas

• Para criarmos o controller vamos utilizar o Artisan


• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de criação do controlador
 php artisan make:controller HabitosController
Controlador
• Analisando a árvore de diretórios, podemos notar que os
controladores são criados dentro de app/Http/Controllers
• Caso o comando não funcione ou demore muito, pode-se criar
“a mão” o arquivo nesta pasta
Controlador
HabitosController.php

• Vamos programar o método index, retornando um HTML


Etapa 5
Criando a camada View
Camada View
• Para que não misturemos o HTML ao controller, criamos a
camada View
• Desta maneira, o controlador irá solicitar a renderização de uma
visão, e não o retorno de um HTML

• Primeiro, vamos alterar o controlador para solicitar a


renderização de uma view
Camada View
HabitosController.php

• Controller irá retornar a renderização de uma view

• Aqui estamos solicitando a renderização da view “habitos”


passando o argumento ‘nome’ como parâmetro
Camada View
• Para manipulação e renderização da camada de visão, o
Laravel contém um recurso chamado Blade

• O Blade é um sistema de template simples e poderoso

• Nele você pode utilizar todos os recursos que ele fornece, ou até
mesmo programar normalmente em PHP

• É um facilitador de desenvolvimento front-end


Camada View
habitos.blade.php

• Vamos criar, dentro de resources/views o habitos.blade.php

• Note que usamos o parâmetro $nome, vindo do controlador


• O uso da tag {{ ... }} é específico do Blade, facilitando
Etapa 6
Entendendo a camada Model
Camada Model
• Quando falamos na arquitetura MVC, falamos em separação
de responsabilidades em nossa aplicação

• Já vimos o “C”ontroller e a “V”iew


• Agora, temos que responsabilizar o “M”odel
Camada Model
• A camada Model é a camada responsável por fazer qualquer
consumo e transação de dados na aplicação
• Logo, quando falamos em Model, falamos em DADOS!

• Quando falamos em Model, estamos falando de diversas


fontes de dados
• Arquivos Json
• Banco de dados
• WebServices
• Arquivos de texto
• Etc
Camada Model
• Assim como o Controller, criar um Model é simples

• Para criarmos o model vamos utilizar o Artisan


• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de criação do model
 php artisan make:model Habito -m
Camada Model
• Analisando as mensagens retornadas pelo comando executado
pelo Artisan notamos que dois arquivos foram criados

• O model
• E a Migration (parâmetro –m)
• São arquivos para configuração de banco de dados
• Facilita a criação e alteração de campos em tabelas
Camada Model
• Analisando a árvore de diretórios, podemos notar que os
models são criados dentro de app/
• Caso o comando não funcione ou demore muito, pode-se criar
“a mão” o arquivo nesta pasta
Camada Model
• Analisando a árvore de diretórios, podemos notar que as
migrations são criados dentro de database/migrations
• As migrations, em particular, devem ser geradas pelo comando
• O comando configura o autoload para carregamento

• A migration contém dois métodos principais (up e down)


Camada Model
• Migration é um recurso do Laravel
• Objetivo é gerenciar as mudanças estruturais do banco de dados da
aplicação
• Para cada tabela, coluna ou índice criados em nosso banco de dados
podemos usar a migration para fazer essa operação automática

• Podemos notar que a migration contém dois método


• Up  executado sempre que executamos a migration
• Down  executado sempre que executamos um rollback da
migraiton
Camada Model
• Note que o método Up está sendo responsável por uma tabela
chamada “habitos”

• Por padrão, o Laravel cria a migration com duas colunas


• ID  usando tipo auto_incremento
• Atributo timestamps  cria duas tabelas de data/hora no banco
• Created_at
• Updated_at
Camada Model
• Seguindo o desenvolvimento de nossa aplicação, vamos
adicionar os campos necessário para os hábitos
• Nome  texto com tamanho 20
• Descrição  texto com tamanho 50
• Tipo de hábitos  texto tamanho 10
• Dia de início de controle  campo de data
• Objetivo  numérico

• Para conhecer os tipos de dados de migrations no Laravel


• Acessar “Available Colunm Types” em
https://laravel.com/docs/5.4/migrations
Camada Model
2017_05_04_183744_create_habitos_table.php

• Vamos adicionar os novos campos ao método Up()


Camada Model
• Para podermos executar a migration criada, primeiro devemos
criar o banco de dados “meuhabito”

• Para isso, acesse o gerenciador de BD (MySQLWorkBench ou


phpMyAdmin) e crie o banco
Camada Model
• Com o banco de dados criado
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de execução de migrations
 php artisan migrate
Camada Model
• Podemos notar que as 3 migrations foram executadas
• Users
• Password resets
• Habitos
Camada Model
• PARAMOS AQUI!!!!!
Camada Model
• Podemos notar que as tabelas foram criadas
Camada Model
• Podemos notar as colunas da tabela “habitos” criadas
Etapa 7
Brincando com os dados através do recurso Tinker
Camada Model
• A classe model, criada, não contém métodos programados

• Porém, ele possui uma infinidade de recursos para podermos


manipular os dados da tabela
• Devido ao uso da biblioteca Eloquent

• O Laravel contém um recurso, console iterativo, chamado


Tinker
Camada Model
• Com o Tinker podemos “brincar” com nossos dados
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de execução do Tinker
 php artisan tinker

• Agora, podemos criar, procurar, editar e excluir registros de


dentro das tabelas do banco de nossa aplicação
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Abrir o tiker
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Informamos ao Tinker que vamos
usar o model “Habito”
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Criamos o objeto $hab que é uma
instância do Habito
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Atribuímos uma valor ao atributo
nome
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Atribuímos uma valor ao atributo
descricao
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Atribuímos uma valor ao atributo
tp_habito
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Atribuímos uma valor ao atributo
objetivo
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Para salvar os dados informados no
objeto $hab, invocamos o método
save()

Note que o método save() não foi


programado
Porém, o Laravel utiliza a biblioteca
Eloquent, que contém os principais
métodos para CRUD já
programados
Camada Model
• Usaremos o Tinker para inserir alguns registros na tabela
“Habitos” usando o model programado
Para salvar os dados informados no
objeto $hab, invocamos o método
save()

Note que o método save() não foi


programado
Porém, o Laravel utiliza a biblioteca
$hab->dt_inicio_ctrl = “2017-05-05 00:00:00” Eloquent, que contém os principais
métodos para CRUD já
programados
Camada Model
• Usaremos o Tinker consultar os registros da tabela “Habitos”
usando o model programado

Usamos o método all()


 Habito::all();
Camada Model
• Adicione três novos hábitos via Tinker

Obs: para inserir um valor a um campo datetime temos usar a seguinte


string
“AAAA-MM-DD HH:MM:SS”
“2017-05-04 21:00:00”  Dia 05/04/2017 às 21hr
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Abrimos o Tinker e informamos o uso do model


“Habito”
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Usamos o método “find(id)” para localizar um


registro com o ID informado no parâmetro
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Com o uso do find o Tinker irá apresentar os dados


do registro buscado
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Alteramos o valor do atributo nome de “Correr” para


“Corrida”
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Depois salvamos o objeto com o uso do método


save()
Camada Model
• Usaremos o Tinker alterar um registro da tabela “Habitos” usando o
model programado

Para mostrar a atualização do objeto no banco de


dados invocamos novamente o método find(id)
Etapa 8
Listando os Hábitos cadastrados
Camada Model
• A classe model, criada, não contém métodos programados

• Porém, ele possui uma infinidade de recursos para podermos


manipular os dados da tabela
• Devido ao uso da biblioteca Eloquent

• NÃO PROGRAMAMOS NENHUM MÉTODO NA CLASSE


• ISSO É ELOQUENT
Controller
• Agora, com dados cadastrados no BD, vamos listar em tela para o
usuário visualizar

• Para isso, vamos alterar o HabitosController.php passando os


dados do banco como parâmetro no método index
Controller
• Vamos alterar o HabitosController.php passando os dados do
banco como parâmetro no método index
Controller
• Vamos alterar o HabitosController.php passando os dados do
banco como parâmetro no método index

1- Adicionamos o uso do model “Habito”


Controller
• Vamos alterar o HabitosController.php passando os dados do
banco como parâmetro no método index

2- Usamos a função all() do Habitos


(EloquentORM) para armazenarmos os registros
na variável $hábitos

3- Passamos através de parâmetro os registros


para a rota “/hábitos”
View
• Agora, na View (habitos.blade.php) vamos apresentar os
registros passados por parâmetro
Etapa 9
Desenvolvendo um template padrão
View
• Nossa tela de listagem está funcional

• Como já visto, o blade é uma ferramenta poderosa

• Com o Blade podemos montar uma visão padronizada e apenas


importa-la em nossas visões de dados

• Desta forma, baixe o arquivo app.blade.php da intranet e


coloque na pasta resource/views
View
• Podemos notar que no final do arquivo temos

• A TAG @yield reserva uma seção das páginas herdadas para ser
substituída pela nova seção... Vamos ver!
View
• Vamos herdar o template app no habitos.blade.php

• Agora podemos usar a seção ‘content’ reservada no template


através do @yield
View
• Agora podemos usar a seção ‘content’ reservada no template
através do @yield
View ‘adminlte::default’

• Agora podemos usar a seção ‘content’ reservada no template


através do @yield
Com o extends do template “app” podemos abrir a seção
‘content’

Na linha 3 abrimos a seção e na linha 15 fechamos a mesma

Com isso, tudo que estiver dentro da seção ‘content’ será


aplicado ao espaço reservado pela TAG @yield
Etapa 10
Listando os Hábitos cadastrados em um tabela
View
• Vamos aprimorar nossa listagem mostrando nossos registros em
uma tabela
View
• Vamos aprimorar nossa listagem mostrando nossos registros em
uma tabela  criamos primeiro o cabeçalho
View
• Vamos aprimorar nossa listagem mostrando nossos registros em
uma tabela  criamos a listagem de dados
Etapa 11
Tela de cadastro de novos hábitos
Cadastro
• Nossa tela de listagem está funcional e padronizada

• Agora devemos criar uma tela de cadastro de novos hábitos

• Para isso, temos que criar um método no controller para


renderizar a tela de criação
Cadastro
• No HabitosController.php vamos criar o método “create”
Cadastro
• No HabitosController.php vamos criar o método “create”

Criamos o método create para renderizar


a view habitos.create
Cadastro
• No HabitosController.php vamos criar o método “create”

Também, alteramos o retorno da view do


método index para renderizar a view
index do habitos
Cadastro
• Para facilitar a organização de nosso código, criaremos uma pasta
chamada habitos dentro da pasta resources/views

• Assim, todas as views referentes ao nosso CRUD de hábitos


estará nela

• Primeiro, renomeie o arquivo habitos.blade.php para


index.blade.php e coloque dentro de
resources/views/habitos
Cadastro
• Vamos criar a tela de cadastro de novo hábito
• Crie o arquivo create.blade.php
@extends(’adminlte::default’)
Cadastro
• Criamos o método create no controller e a tela de inserção de
dados

• Agora temos que criar a rota para que isso tudo seja acessado
pelo usuário
• Adicione a rota no web.php
• Temos a rota get /habitos para a listagem
• E agora temos a rota /habitos/create para adicionar registro
Cadastro
• Criamos o método create no controller e a tela de inserção de
dados

• Agora temos que criar a rota para que isso tudo seja acessado
pelo usuário
• Adicione a rota no web.php
• Temos a rota get /habitos para a listagem
• E agora temos a rota /habitos/create para adicionar registro
Etapa 12
Vamos trabalhar com formulários no Blade
Form::
• Para trabalharmos com formulários no laravel vamos instalar o
laravelcollective/html

• É um pacote que contém componentes projetados para o Laravel


Form::
• Para trabalharmos com o laravelcollective/html execute
$ composer require “laravelcollective/html”:”^5.4.0”

$ composer require laravelcollective/html


Form::
• Sempre que instalarmos pacotes devemos registrá-lo como
servidor de pacotes para que o laravel possa encontrar os
componentes

• Para isso, vamos adicionar ao seguinte linha no final do array


providers do arquivo config/app.php
Form::
• Sempre que instalarmos pacotes devemos registrá-lo como
servidor de pacotes para que o laravel possa encontrar os
componentes

• Para isso, vamos adicionar ao seguinte linha no final do array


aliases do arquivo config/app.php
Form::
• Com essa instalação e configuração podemos começar a utilizar
os pacotes nos formulários
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Primeiro informamos ao Laravel que


estamos “abrindo” um formulário nesta
view
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Nome”


no formulário
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Nome”


no formulário
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Podemos notar que criamos um “label” e


um “text” através do uso do
componente instalado
Form::
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente


“Descrição” no formulário
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente


“Descrição” no formulário
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Tipo”


no formulário, como um DropDown
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Tipo”


no formulário, como um DropDown
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente


“Objetivo” no formulário, como um
campo numérico
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente


“Objetivo” no formulário, como um
campo numérico
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Data”


no formulário, como um campo Date

OBS
Vamos usar um componente específico
para data, então, por ora, vamos deixar
esta data fixa
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar o componente “Data”


no formulário, como um campo Date
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar um botão para poder


submeter os dados para serem salvos no
BD
Form::
• Vamos alterar o resource/views/habitos/create.blade.php

Vamos adicionar um botão para poder


submeter os dados para serem salvos no
BD
Form::
• Se tentarmos criar um novo hábito veremos um erro
• Todo formulário deve ter uma ação, e não configuramos a ação ao
formulário ainda

• Para isso devemos criar uma nova action que será responsável
por receber a requisição (request) do form
• Essa action deve persistir os dados no banco usando o model
Habito.php
Form::
• Antes de criarmos a nova action, precisamos criar uma nova rota
no routes/web.php

• Como podemos ver, estamos invocando um método “store” do


controlador
Form::
• Agora, no HabitosController.php vamos criar este novo método
Form::
• Agora, no HabitosController.php vamos criar este novo método

O parâmetro Request contém todas as


informações recebidas via form
Form::
• Agora, no HabitosController.php vamos criar este novo método

Aqui atribuídos todas as informações do


request em uma variável que será
passada como parâmetro para a inserção
do registro no BD
Form::
• Agora, no HabitosController.php vamos criar este novo método

Por fim, redirecionamos o usuário para a


tela de listagem de hábitos
Form::
• Temos a rota criada e o novo método implementado
• Agora devemos definir a ação do formulário
• Para isso, vamos alterar o habitos/create.blade.php

• Nota-se que na abertura do form definimos que a ação do formulário


será redirecionada para a rota habitos/store
Form::
• Vamos cadastrar um novo hábito!!

• OPS, deu o seguinte erro!!!!!!

O Laravel trabalha com uma proteção


nos Models contra inserção em massa de
dados (segurança contra ataques)
Form::
• Para resolver este problema, temos que informar ao nosso
Model que ele pode aceitar a inserção de dados em massa para
os campos apresentados em tela
• Vamos trabalhar com o app\Habito.php
• Adicionaremos um atributa chamado fillable (preenchível)
Form::
• Pronto!!

• Agora podemos inserir novo hábito

• Após a inserção, seremos redirecionados para a tela de listagem


Etapa 13
Validação dos dados a serem cadastrados
Validação
• O Laravel nos possibilita validar, facilmente, as informações que
estão sendo enviadas através do request

• Utilizaremos o artisan para gerar automaticamente a classe de


Request
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando para criação do request
 php artisan make:request HabitoRequest
Validação
• O Laravel nos possibilita validar, facilmente, as informações que
estão sendo enviadas através do request

• Utilizaremos o artisan para gerar automaticamente a classe de


Request
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando para criação do request
 php artisan make:request HabitoRequest
Validação
• Ao abrirmos a classe criada (HabitoRequest.php) podemos
perceber que dois métodos foram criados
authorize()
• Determina se temos autorização de realizar essa requisição
• Se retornar true quer dizer que a requisição pode ser executada
• Se retornar false a requisição será bloqueada
• Podemos definir a regra que quisermos nela
• Para o nosso caso, retornaremos true por padrão
Validação
• Ao abrirmos a classe criada (HabitoRequest.php) podemos
perceber que dois métodos foram criados
rules()
• Método responsável pelas regras de validação de campos
• O Laravel possui uma série e padrões possíveis para validação
https://laravel.com/docs/5.0/validation#available-
validation-rules
Validação
• Ao abrirmos a classe criada (HabitoRequest.php) podemos
perceber que dois métodos foram criados
rules()
• Método responsável pelas regras de validação de campos
Validação
• Com as regras de request definidas, devemos injetar esta classe
no método store do HabitosController.php
Validação
• Dessa forma, toda requisição de inserção de hábito irá passar
pelas regras de validação

• Agora, se tentarmos cadastrar um novo hábito sem informar os


dados nos campos, nada acontecerá
• Nem irá cadastrar novo hábito
• Nem seremos direcionados à listagem de hábito

• Isso ocorre pois o método store nem chegou a ser executado, já


que o HabitoRequest bloqueou as regras
Validação
• Precisamos informar ao usuário que erros ocorreram
• Trabalharemos com a variável $errors, que armazena todos os erros de
validação encontrados para listarmos ao usuário
• Vamos alterar o habitos/create.blade.php
Etapa 14
Removendo hábito cadastrado
Remoção
• Para fazer a remoção de um registro, devemos criar uma action
no controlador (HabitosController.php)

• Criar o método destroy() para deletar o registro


Remoção
• Para fazer a remoção de um registro, devemos criar uma rota
(routes/web.php)

• Nesse caso, quando acessarmos a rota


http://localhost:8000/habitos/1/destroy
automaticamente o registro de ID 1 será excluído
Etapa 15
Tela de edição de hábitos cadastrados
Edição
• A tela de edição de um registro deve ser idêntica a tela de
inserção

• Começamos criando duas novas rotas (routes/web.php)


Edição
• A tela de edição de um registro deve ser idêntica a tela de
inserção

• Note, que a rota update utiliza o HTTP PUT


• Este método é único do Laravel para tratar com segurança os dados
Edição
• A tela de edição de um registro deve ser idêntica a tela de
inserção

• Note, que devemos criar dois novos métodos no controlador


Edição
• Alterando o controlador para buscar os dados do BD e enviar
para a rota de edição (tela de apresentação ao usuário)
Edição
• Alterando o controlador para atualizar os dados no BD
Edição
• Agora temos que criar a tela de edição
• Crie o arquivo php edit.blade.php
Edição
• Copie o conteúdo do arquivo create.blade.php para o edit
Edição
• Vamos começar a adaptar o código para a edição
• Altere a tag <h1> para informarmos o habito em edição
Edição
• Vamos começar a adaptar o código para a edição
• Altere a ação e o método de requisição do form
Edição
• Vamos começar a adaptar o código para a edição
• Altere a ação e o método de requisição do form
Edição
• Vamos começar a adaptar o código para a edição
• Todos os campos “null” serão substituídos pelos seus devidos valores
Edição
• Vamos começar a adaptar o código para a edição
• Todos os campos “null” serão substituídos pelos seus devidos valores
• Fazer esta alteração em todos os campos do formulário
Edição
• Vamos começar a adaptar o código para a edição
• Por fim, alterar a descrição do botão
Edição
• Resultado ao acessar
/habitos/{id}/edit

Acesse a tela de edição e


altere o dado de algum
registro
Etapa 16
Ajustando as rotas
Organizando as rotas
• Vamos organizar as rotas
• Routes/web.php
Organizando as rotas
• Vamos organizar as rotas
• Vamos agrupar as rotas, adicionando prefixo para facilitar a manutenção
Organizando as rotas
• Vamos organizar as rotas
• Se mudarmos o prefixo, todas as rotas mudam
Organizando as rotas
• Vamos organizar as rotas
• Quando utilizamos rotas nomeadas, podemos acessar as rotas pelos
nomes ao invés de chamar uma URL fixa
Organizando as rotas
• Vamos organizar as rotas
• Usamos uma key ‘as’ para nomearmos a rota e uma key ‘uses’ para
definirmos qual a ação da rota
Organizando as rotas
• Vamos organizar as rotas
• Usamos a clausula where para informar que o parâmetro ID deve ser
numérico
Organizando as rotas
• Vamos organizar as rotas
• Agora devemos alterar todos os lugares que temos rotas fixas pelas rotas
nomeadas
Organizando as rotas
• Vamos organizar as rotas
• No controlador (app/Http/Controllers/HabitosController.php)
• Alterar todos os retornos para rotas habitos
Organizando as rotas
• Vamos organizar as rotas
• Nas visões (resources/views/habitos)  CREATE.BLADE.PHP
• Alterar todos as rotas do form open
Organizando as rotas
• Vamos organizar as rotas
• Nas visões (resources/views/habitos)  EDIT.BLADE.PHP
• Alterar todos as rotas do form open
Etapa 17
Ajustando links na tela de listagem
Adicionando botões de edição e exclusão
Otimizando a listagem
• Vamos melhorar nossa tela de listagem adicionando dois botões
Otimizando a listagem
• Vamos melhorar nossa tela de listagem adicionando dois botões
Otimizando a listagem
• Vamos melhorar nossa tela de listagem alterando a forma de
impressão do tipo de hábito (bom ou ruim)
Etapa 18
Criando o cadastro de Histórico
Camada Model
• Para criarmos o model e a migration dos historicos vamos
utilizar o Artisan
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de criação do model
 php artisan make:model Historico -m
Etapa 19
Criando campo FK
Migration
• Vamos alterar o arquivo de migração para criarmos a tabela no
banco

php artisan migrate


Migration
• Vamos alterar o arquivo de migração para criarmos a tabela no
banco
Migration
• Vamos alterar o arquivo de migração para criarmos a tabela no
banco
Etapa 20
Criando relacionamento da FK
Model
• Vamos alterar o model Historico (app/Historico.php)

• Primeiro vamos resolver o problema de MassAssignment adicionando


o campo fillable
Model
• Vamos alterar o model Historico (app/Historico.php)

• Agora, dentro do histórico, vamos criar uma função para retornar o


Habito cadastrado no Histórico
Model
• Vamos alterar o model Historico (app/Historico.php)

• A função belongsTo informa ao Laravel que o Historico pertence ao


Habito, pois simplesmente contém um habito

• Um hábito pode existir sem um histórico?


• E um histórico, pode existir sem um hábito?
Por isso um histórico pertence a um hábito
Model
• Vamos alterar o model Habito (app/Habito.php)

• Agora vamos fazer o inverso


• Vamos informar ao Habito que ele possui diversos Históricos
Model
• Vamos alterar o model Habito (app/Habito.php)

• A função hasMany informa ao Laravel que um Habito pode estar em


diversos históricos
Etapa 21
Criando as rotas
Model
• Vamos adicionar as rotas dos historicos (routes/web.php)

• Adicionaremos as mesmas rotas dos habitos


Etapa 22
Criando o controlador
Controlador
• Para criarmos o controller vamos utilizar o Artisan
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de criação do controlador
 php artisan make:controller HistoricosController
Controlador
• Para criarmos o controller vamos utilizar o Artisan
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando de criação do controlador
 php artisan make:controller HistoricosController
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o index()
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o create()
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o store()
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o destroy()
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o edit()
Controlador
• Agora, com o controlador criado, vamos criar os métodos
necessários para o CRUD

• Adicionaremos o update()
Etapa 23
Criando o request para validação dos dados
Validação
• Utilizaremos o artisan para gerar a classe de Request
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando para criação do request
 php artisan make:request HistoricoRequest
Validação
• Utilizaremos o artisan para gerar a classe de Request
• Então, usando o terminal (cmder) dentro da pasta meu_habito
• Execute o comando para criação do request
 php artisan make:request HistoricoRequest
Validação
• Na classe HistoricoRequest.php vamos alterar o return do
método authorize para TRUE
Validação
• Na classe HistoricoRequest.php vamos adicionar as regras no
método rules()
Validação
• Na classe HistoricoController.php devemos adicionar o uso de
dois arquivos (Model e Request)
Etapa 24
Criando a visão
Visão
• Devemos criar agora as telas do histórico

• Então, vamos criar uma pasta chamada historicos dentro de


resources/views
Visão
• Devemos criar agora as telas do histórico

• Dentro da pasta historicos vamos criar três novos arquivos PHP


• create.blade.php
• edit.blade.php
• index.blade.php
Visão
• Vamos criar a tela de listagem (index.blade.php)  Parte 1
@extends('adminlte::default')
Visão
• Vamos criar a tela de listagem (index.blade.php)  Parte 2
Visão
• Vamos criar a tela de criação (create.blade.php)
• Primeiro adicionamos o layout e apresentamos os erros
@extends('adminlte::default')
Visão
• Vamos criar a tela de criação (create.blade.php)
• Depois abrimos o formulário, adicionamos o botão de criação (realizada
ação do form) e depois fechamos o formulário
Visão
• Vamos criar a tela de criação (create.blade.php)
• Depois abrimos o formulário, adicionamos o botão de criação (realizada
ação do form) e depois fechamos o formulário
Visão
• Vamos criar a tela de criação (create.blade.php)
• Vamos adicionar o primeiro campo ao formulário
• Adicionando o campo Hábitos
• Usamos o campo do tipo “select” e depois usamos os métodos orderBy
e pluck do EloquentORM presente no Model Habito
Visão
• Vamos criar a tela de criação (create.blade.php)
• Vamos adicionar o primeiro campo ao formulário
• Adicionando o campo Hábitos
• Usamos o campo do tipo “select” e depois usamos os métodos orderBy
e pluck do EloquentORM presente no Model Habito

Apresenta na listagem o
Nome e grava o Id no campo
habito_id
Visão
• Vamos criar a tela de criação (create.blade.php)
• Vamos adicionar o campo de data e hora
Visão
• Vamos criar a tela de criação (create.blade.php)
• Vamos adicionar o campo de data e hora
Visão
• Vamos criar a tela de edição (edit.blade.php)
• Copie o código do create.blade.php do histórico
• Cole no arquivo edit.blade.php do histórico
• Altere o título do formulário de “Novo Historico” para “Editando Historico”
Visão
• Vamos criar a tela de edição (edit.blade.php)
• Altere o Form::Open
Visão
• Vamos criar a tela de edição (edit.blade.php)
• Por fim, substitua todos os parâmetros “NULL” pelos campos corretos de
edição

Você também pode gostar