SlideShare uma empresa Scribd logo
1 de 108
Baixar para ler offline
Git
Sistema de Controle de Versão
Git
Comandos Básicos de Git
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Sistemas de Controle de
Versão
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Sistema de Controle de Versão
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
• Registra mudanças feitas em um arquivo ou conjunto
de arquivos ao longo do tempo;
• É possível recuperar versões anteriores;
• Verificar contribuições de cada membro no projeto;
• Pode ser utilizado para qualquer coisa que se altera
com o tempo, como CV, Software, Documentos Legais;
• Ex: ”seguimento de revisão” do MS Word
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Tipos de Sistemas de Controle de Versão
Sistema de Controle de Versão
Local
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Sistema de Controle de Versão
Centralizado
Tipos de Sistemas de Controle de Versão
Sistema de Gestão de Versão
Distribuída
• Qualquer um pode ser
servidor;
• Múltiplos Clientes Clonam
repositórios completos;
• O registro de alteração e
diferente da aplicação da
alteração;
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Git
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
And then realize that nothing is perfect. Git is
just *closer* to perfect than any other SCM out
there.
_ _
Linus
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
• 2002 - Linus Tovards usa BitKeeper para o controle de versões de
Linux.
• 6 de Abril de 2015 – Termina a licença de BitKeeper e Linus decide
criar o seu próprio SCM
• 18 de Abril de 2005 – GIT é laçando e já pode fundir códigos
• 16 de Junho de 2005 - É oficialmente usado como SCM para Linux;
• Sistema de Controle de Versão distribuído;
• Mais Rápido e eficiente;
• Melhores serviços de hospedagem de repositórios: github.com,
bitbucket.com , gitlab.com, assembla.com , codebasehq.com
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Diretório de Trabalho e Índices
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Fonte: https://backlogtool.com/git-guide
COMMITS, BRANCHES e TAGS
• Commit é o estado do repositório corrente, o nome dado será
pelo hash SHA1 do conteúdo do repositório. O comando utiliza
se para passar o estado indexado para o repositório local.
• Branches são usados para criar uma nova linha de
desenvolvimento ou funcionalidades isoladas, por defeito todo
o projeto vem com master branch.
• Tags atribui um nome explicativo (Etiqueta) a uma versão
específica do repositório. São imutáveis. (Uma branch que não
se altera).
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Clone ,Pull e Push
• Clone – Cria uma instancia local do repositório completo.
• Pull - copia as alterações de uma repositório remoto para um
local. É usado para sincronização entre duas instancias de
repositório.
• Push - cópias mudanças de uma instância de repositório local
para um remoto. Isto é usado para armazenar as alterações
permanentemente no repositório Git.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Git Commands
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
•Inicializar Git (Criar um repositório do seu
projeto, uma pasta .git com todas as
informações do repositório )
•git init
•Adicionar todos os arquivos no projeto
•git add .
•git commit –m ”mensagem da alteração”
•Ao alterar algum ficheiro, antes de commit
•git add nome_ficheiro_ou_pasta
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
•Verificar o que aconteceu
•git status
•git log
•Adicionar servidor para repositório remoto
•git remote add hostname hosturl
•Enviar todas alterações do seu repositório
•git push hostname branchname
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
•Trabalhando com varias versões em paralelo
•git branch novoramo
• Cria uma nova branch
•git checkout novoramo
• Muda para a branch novoramo
•Juntar os ramos
•git merfe novoramo
• Vai juntar o novoramo com o ramo que estiver
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Recapitulando
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Próximo Passos
• Criar um repositório no GitHub para o projeto do treinamento e
enviar o link do projeto para a equipa de formação.
• https://guides.github.com/activities/hello-world/
• Git Flow ???
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Dados do codeafrica.org
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Referencias
• Loeliger, Jon, and Matthew McCullough. Version Control with
Git: Powerful tools and techniques for collaborative software
development. " O'Reilly Media, Inc.", 2012.
"Git - The Simple Guide - No Deep Shit!". Rogerdudler.github.io.
N.p., 2016. Web. 9 Apr. 2016.
"Git Tutorial". www.tutorialspoint.com. N.p., 2016. Web. 9 Apr.
2016.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
Models
Conceitos
Primeiro CRUD
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
23
Models
• Diferentemente do que muita gente pensa, o conceito de
Models é bem abrangente. Quando falamos de Models,
estamos a falar de um participante que terá o objetivo de fazer
qualquer consumo e transação de dados em nossa aplicação.
• Vamos imaginar que desenvolveremos uma simples aplicação
que fará a exibição de diversas informações sobre tweets.
• Nesse caso, quem fará o consumo e a gestão das informações
(dados) dos tweets para nossa aplicação, será exatamente
nossa camada Model.
• Entendam, quando falamos em Model, falamos em dados!
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
24
Models
• Quando falamos na camada de Model, muita gente já faz a
associação direta de que são os Models que “cuidam”
diretamente da parte da base de dados de nossa aplicação.
• Na realidade, a parte da base de dados, é apenas uma, das
mais diversas fontes de dados que nossa Model pode gerir,
todavia, como é extremamente comum termos bases de dados
atreladas as nossas aplicações, a associação entre Models e
base de dados fica, muito mais evidente do que outras fontes
de dados.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
25
Models
• De qualquer forma, sempre tenha em mente que quando
estamos a falar de Models, estamos falando de qualquer tipo
de fonte de dados, como:
Webservice / API
base de dados
Arquivos textos
entre outros
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
26
Models no Laravel
• Normalmente, quando estamos a falar de Models no Laravel,
estamos falando de como faremos acesso as informações da
base de dados em nossa aplicação, bem como faremos a
disponibilização e transações com tais informações.
• O Laravel possui um ORM chamado de Eloquent, o qual faz a
relação direta entre as nossas classes de Model com nossas
tabelas de base de dados.
• Acredito que o grande goal do Eloquent, é a sua excepcional
facilidade de uso, nesse ponto, mostraremos brevemente como
você poderá fazer uso dessa poderosa ferramenta.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
27
Configurando um base de dados
• Como quase tudo no Laravel, fazer a configuração de um base
de dados é algo extremamente simples. Basicamente, você
terá de definir qual será o SGDB a ser utilizado e passar as
informações de acesso e/ou credenciais.
• O arquivo responsável por conter todos os SGDBs pré-
configurados no Laravel é:
config/database.php
• Ele é composto por um array, onde facilmente poderá ser
modificado.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
28
Criando nosso primeiro Model
• Criar um model no Laravel é algo extremamente simples, basta criar
uma classe que estenda de IlluminateDatabaseEloquentModel,
por outro lado, o framework nos traz diversas facilidades para que
criemos nossos models, utilizando a linha de comando com o
Artisan. Basta correr o comando:
php artisan make:model Produto
E terá o seguinte resultado:
Model created successfully.
Created Migration: 2016_04_09_213916_create_produtos_table
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
29
Criando nosso primeiro Model
O Artisan, acaba de criar dois arquivos:
• Produto.php, dentro de nossa pasta app
• 2015_04_20_213916_create_produtos_table.php, dentro da
pasta database/migrations
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
30
Falando brevemente sobre Migrations
• O Laravel possui o recurso de migrations, onde tem o objetivo
de gerir cada mudança estrutural da nossa base de dados, ou
seja, para cada tabela, coluna, índice, criados em nosso base
de dados, podemos ter uma migration para realizar essa
operação de forma automática.
• Um ponto bem interessante sobre migrations, é que temos
exatamente cada versão da estrutura de nossa base de dados,
logo, se sentirmos a necessidade, podemos facilmente dar um
“roll back”.
• Seguinte nosso exemplo do model criado: Produto, a migration
2016_04_09_213916_create_produtos_table foi criada:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
31
Falando brevemente sobre Migrations
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
32
Falando brevemente sobre Migrations
• Se você perceber, temos dois métodos principais: up() e
down(). O método up é executado quando a migration corre, já
o método down, é executado cada vez que damos um roll
back, nessa mesma migration.
• Nesse nosso caso, perceba que a o método up está sendo
responsável por uma tabela chamada de produtos.
• Por padrão, tal tabela possuirá uma coluna: ID, auto_increment
e outras duas colunas referentes a data / hora de inserção e
alteração de um registro (created_at e updated_at).
• Para que possamos seguir com nosso exemplo, adicionarei
mais duas colunas em nossa tabela produtos:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
33
Falando brevemente sobre Migrations
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
34
Feita essa nossa alteração, basta apenas corrermos os seguinte comandos via
Artisan:
Falando brevemente sobre Migrations
• O comando migrate:install, cria uma tabela em nosso base de
dados para poder gerir nossas migrations.
• Já o comando migrate, executa todas as migrations disponíveis
em nossa aplicação.
• Pronto! Já temos uma tabela de base de dados criada, pronta
para ser utilizada em conjunto com nosso Model Produto.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
35
Brincando com nosso Model 
• Se você abrir o arquivo de nosso Model, localizado em:
app/Produto.php, você terá o seguinte resultado:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
36
Brincando com nosso Model 
• Apesar de ser um arquivo extremamente pequeno, ele estende
de uma classe chamada Model, que possui uma infinidade de
recursos para você manipular sua tabela de base de dados.
• Vamos brincar um pouco com nosso Model, utilizando a o
tinker, um console interativo, disponibilizado pelo próprio
Laravel.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
37
Brincando com nosso Model 
• Perceba que ao acessarmos o tinker, criamos um objeto
Produto (baseado em nosso Model), e definimos dois atributos:
nome e descricao; depois disso, apenas executamos o método
save() e pronto. Já temos nosso primeiro registro gravado em
nossa base de dados!
• Realmente é MUITO simples trabalhar com Models baseados
no Eloquent.
Mas nos cá no Training vamos um pouco além!
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
38
Brincando com nosso Model 
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
39
• Ao chamarmos estaticamente o método all() de nosso model, perceba que recebemos uma
coleção de modelos Produto (Eloquent), que nesse caso, é o produto que acabamos de inserir no
base de dados.
• Se quisermos, podemos selecionar apenas o Produto desejado, utilizando o método find().
Brincando com nosso Model 
• Nesse caso, o Model Produto, com o ID 1, foi atribuído em
nossa variável $livro.
• Podemos agora, fazer modificações nesse objeto e persisti-las
novamente no base de dados:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
40
Pronto, mudamos facilmente a descrição de nosso produto.
Vamos listar novamente os produtos, para ver se nossa modificação foi
refletida:
Brincando com nosso Model 
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
41
Utilizando nosso Model no Controller
• Agora que já demos nossos primeiros passos com nosso Model, vamos
exibir tais informações no browser do usuário, seguindo exatamente o
fluxo que vimos anteriormente, todavia, aplicando agora nossos
conhecimentos sobre Models.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
42
• Perceba que estamos atribuindo para a variável produtos, uma coleção de
produtos trazida pelo nosso Model, depois disso, apenas atribuímos tal
coleção para nossa View (produtos.blade.php).
Utilizando nosso Model no Controller
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
43
Utilizando nosso Model no Controller
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
44
Vejam que utilizamos as tags do PHP para fazermos o foreach; para facilitar
nossa vida, podemos utilizar o recurso de foreach do próprio Blade para facilitar!

Utilizando nosso Model no Controller
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
45
Blade
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
46
Contexto
Problema
•Todas as paginas
HTML tem formato
similar, como o
rodapé, o
cabeçalho, etc. E é
custoso repetir o
mesmo código
varias vezes.
Solução
•Criar layouts blade
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
47
Como é feito?
No diretório da instalação do Laravel, verifique o ficheiro
../resources/view/welcome.blade.php
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
48
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
49
• Criamos os diretórios Layouts e Includes para adicionarmos os
layouts das paginas e o include para os conteúdos mais
usados pelos site.
• mkdir layouts
• mkdir includes
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
50
• O código do cabeçalho é genérico o que podemos incluir num
dos ficheiros para melhor ser reutilizado. Que vamos por no
includes. ../view/includes/head.blade.php
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
51
• Podemos criar um layout para ser usado, com a estrutura geral
de HTML. No diretório layout. ../view/layout/default.blade.php
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
52
Yield(”secção") – Mostra
conteúdo de secção que
tem o mesmo nome do
argumento;
Include (ficheiro) – inclui o
ficheiro de outro template
• Vamos alterar o ficheiro welcome.blade.php de modo que use
a nossa planilha e os ficheiros de inclusão ;
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
53
@extends – acrescenta a
plantinha com um layout , deve
ser o primeiro elemento de um
template.
@section(nome) – Inicia uma
secção
@stops – termina uma secção.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
54
• Agora no diretório do projeto é só executar php artisan serve
O que mais Blade
permite ?
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
55
Mostrar variáveis de PHP
{{ $var }}
{{ $var or 'default' }}
<?php echo $var; ?>
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
56
Controle logico
@if ($hora < 12 )
Bom dia
@elseif ($hora < 20 )
Boa tarde
@else
Boa Noite
@endif
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
57
Controle logico
@unless ($idade > 18)
Pode comprar bebida alcoólica
@endunless
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
58
Comentários
{{-- Isto é um comentário --}}
Comentários em PHP serão renderizados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
59
Controle de Estrutura For
@for ($i =1 ; $1 <= 10 ; $i++)
<p>{{ $i }} </p>
@endfor
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
60
Controle de Estrutura para Vetores
<ul>
@foreach ($items as $item)
<li>{{ $item }} </li>
@endforeach
</ul>
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
61
Controle de Estrutura para Vetores
<ul>
@foreach ($items as $name =>$item)
<li>{{name}} - {{ $item }} </li>
@endforeach
</ul>
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
62
Controle de Estrutura para Vetores
<ul>
@while ($item = array_pop($items))
<li> {{ $item }} </li>
@endwhile
</ul>
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
63
Internacionalização da aplicação
lang/en/saudacoes.php
<?php
return array(
‘Ola' => ’Hello',
’Adeus' => ’Good by’ );
?>
Welcome.blade.php
• @lang(’saudacoes.Ola')
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
64
Rumo ao primeiro CRUD
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
65
Rumo ao primeiro CRUD
• Normalmente, quem já possui uma certa experiência com
desenvolvimento web, provavelmente já está familiarizado com
o termo CRUD, que significa: Create, Retrieve, Update e
Delete.
• O CRUD nada mais é do que um termo utilizado representando
as principais operações que podemos realizar em uma
entidade, ou seja, Criar, Listar, Alterar e Remover dados.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
66
Herdando um template
• Acredito que vocês já devem ter se antecipado e feito a
seguinte pergunta: Como podemos aproveitar um template
(view) padrão para todas as nossas páginas, sem que
precisemos ficar a duplicar a todo momento nosso HTML que
nos serve como base de nossa aplicação?
• A resposta para essa pergunta é:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
67
Herdando um template
• Essa é uma das grandes vantagens de você poder utilizar o
Blade. O Blade possibilita que você herde suas views de um
template principal a fim de facilitar o reaproveitamento de
código.
• Nossa view: produtos.blade.php encontra-se da seguinte
forma:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
68
Herdando um template
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
69
Nossa idéia, é utilizarmos um template padrão que o Laravel já nos trás para faciltiar nosso trabalho. ;)
Herdando um template
• Se analisar a pasta resources/views, encontrará um arquivo
chamado app.blade.php, esse arquivo é o template padrão
que o Laravel 5 nos trás para que possamos utilizar como base
de nossa aplicação.
• Ao abrir esse arquivo, quase no final, você encontrará a
seguinte chamada: @yield(‘content’). Isso significa que se
criarmos em nossa view, uma @section com o nome de
content, e herdarmos o template app.blade.php, todo o
conteúdo de nossa view aparecerá exatamente no local onde
temos a chamada: @yield(‘content’).
Para facilitar o entendimento, façamos isso na prática:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
70
Herdando um template
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
71
Perceba que utilizamos o comando @extends do Blade para fazer com que nossa
view produtos. blade.php possa herdar o template app.blade.php.
Em seguida, utilizamos a chamada @section(‘content’) para definir que tudo que
estiver dentro dela, será aplicado exatamente aonde temos a chamada
@yield(‘content’) no template app.blade.php. Vejamos o resultado a seguir:
Herdando um template
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
72
WOW! O Blade é mesmo mau…
Fazendo a listagem em uma tabela
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
73
Fazendo a listagem em uma tabela
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
74
Criando página de “Create”
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
75
Criando página de “Create”
• Para facilitar a organização de nosso código, criaremos uma
pasta chamada produtos dentro da pasta:
• resources/views, dessa forma, saberemos que todas as views
referentes ao nosso CRUD de produtos estarão armazenados
nessa pasta.
• Também renomearemos o arquivo:
resources/views/produtos.blade.php para
resources/views/produtos/index.blade.php
• Nesse ponto, vamos criar o arquivo: create.blade.php:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
76
Criando página de “Create”
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
77
Falta registrarmos uma nova rota apontando: produtos/create para essa nossa
nova action. No arquivo routes.php faremos o seguinte registro:
Criando página de “Create”
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
78
Trabalhando com
formulários no Laravel
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
79
Instalando o Illuminate/Html
• Já temos nossa página produtos/create pronta e preparada
para receber nosso formulário.
• Você possui duas opções nesse momento:
Criar manualmente seus formulários HTML
Utilizar a ajuda do componente Illuminate/Html do Laravel;
• Nesse nosso caso, utilizaremos a segunda opção para termos
mais agilidade no processo de criação dos formulários.
• A idéia é instalarmos o pacote: Illuminate/Html
• Para instalá-lo, basta o correr o seguinte comando via
composer. Você terá o resultado similar ao exibido a seguir:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
80
Instalando o Illuminate/Html
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
81
Instalando o Illuminate/Html
• Teremos que registrar esse pacote como um “Service
Provider”, dessa forma o Laravel poderá encontrar esses
componentes.
• Para fazer isso, adicionem a seguinte linha ao final do array
providers dentro do arquivo: config/app.php.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
82
Também, no mesmo arquivo, você terá que adicionar duas linhas no array de
aliases:
Instalando o Illuminate/Html
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
83
Criando formulário
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
84
Ao acessarmos nossa aplicação na rota produtos/create, aparentemente nada
terá mudado, porém, quando inspecionarmos o código fonte, poderemos
perceber que os seguintes itens foram adicionados:
Criando formulário
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
85
O Laravel, automaticamente, criou as tags <form> e ainda um elemento hidden
como um token para proteger nosso formulário contra CSRF.
Vamos agora adicionar os outros itens para nosso formulário ficar completo:
Criando formulário
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
86
Criando formulário
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
87
A action “store”
• Agora que já temos nosso formulário criado, precisamos criar
uma nova action que será responsável por receber a request
do nosso form e chamar nosso Model Produto para persistir os
dados.
• Também precisaremos registrar uma nova rota: produto/store.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
88
Também temos que realizar um pequeno ajuste em nosso arquivo
create.blade.php para apontar o form para a nossa url produtos/store.
A action “store”
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
89
Percebam que em nossa action store,
estamos a receber por parâmetro um
objeto request.
Armazenamos todas as informações
enviadas via form de nosso request na
variável $input.
Depois disso, chamamos o método
create de nosso Model Produto, para
inserir os dados na base de dados.
Em seguida, redirecionamos o usuário
para a listagem dos produtos
novamente.
A action “store”
Mas a vida é uma caixinha de surpresas! Se você me acompanhou até aqui, vai se deparar
seguinte erro ao submeter o formulário:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
90
A action “store”
• O Laravel trabalha com uma pequena proteção em seus
models contra Mass Assigment, ou seja, quando atribuimos
dados em massa, como no caso de termos passado todas as
informações do form directamente.
• Nesse caso, para permitir que possamos inserir os dados do
form diretamente, temos que configurar nosso Model para
aceitar a atribuição em massa de nossos dois campos: nome,
descricao. Para isso, basta adicionar um atributo chamado
$fillable na classe de nosso model Produto.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
91
Validando dados
• Agora que já temos nosso formulário possibilitando a criação
de novos registros, temos que poder validar as informações
que estão sendo enviadas através das requisições.
• O Laravel 5 possui um recurso que podemos chamar de
Requests personalizadas, ou seja, criamos uma classe de
Request e nela informamos os itens que devem ser validados.
• Utilizaremos o artisan para gerar automaticamente essa classe:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
92
Validando dados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
93
O arquivo ProdutoRequest.php foi criado na pasta app/Http/Requests:
Validando dados
• Perceba que temos dois métodos nessa classe: authorize() e
rules().
• O método authorize() determina se temos autorização de
realizar essa request, logo, se ele retornar true, quer dizer que
ela pode ser executada. Entenda que você poderá colocar a
regra que quiser para permitir ou não a requisição de
determinado usuário.
• Já o método rules(), é responsável por validar cada um dos
dados enviados na request.
• O Laravel 5 já possui uma série de validadores padrão que
podem ser encontrados em sua Documentação Oficial.
• Nesse caso, faremos as seguintes alterações em nossa classe
ProdutoRequest:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
94
Validando dados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
95
Validando dados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
96
Agora basta injetarmos essa classe como parâmetro em nossa action store:
Validando dados
• Dessa forma, toda requisição que chegar diretamente para a action
store, será validada pelo método rules() da request ProdutoRequest.
• Agora, se você tentar criar um novo produto pelo formulário e não
informar nenhum valor, você perceberá que não será redirecionado
para a listagem de produtos e, aparentemente, nada acontece.
• Só que na realidade, a nossa action store nem chegou a ser
executada, uma vez que a requisição foi interrompida quando o
ProdutoRequest fez a validação que não retornou de forma positiva.
• Precisamos também informar ao usuário, quais informações estão
incorretas e/ou faltantes, nesse caso, trabalharemos com a variável
$errors, que armazena todos os erros de validação encontrados.
• Adicionaremos o seguinte trecho de código no arquivo
create.blade.php, verificando se há algum erro para se exibido, caso
positivo, exibiremos os erros em uma lista:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
97
Validando dados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
98
Validando dados
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
99
Removendo registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
100
Quando você acessar por exemplo: http:://localhost:8000/produtos/1/destroy, ele
fará, automaticamente, a exclusão do produto, cujo ID seja igual a 1.
Editando registro
• O processo de edição de um registro é muito similar ao de
alteração, principalmente se formos analisar a camada de
visão.
• O primeiro passo para fazer a edição de um registro, é
entender o padrão das URIs que vamos utilizar
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
101
O padrão da rota é muito similar ao do destroy, porém, estamos a
encaminhar o request para a action edit, para a mesma de trazer o
formulário de edição, e a action update para efetivar a alteração na
base de dados.
Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
102
Vamos agora criar a action edit:
Veja que é um método extremamente simples, que pega o produto através do
método find, e retorna o produto encontrado para nossa view.
Nesse ponto, temos apenas que criar nosso arquivo: edit.blade.php, dentro da
pasta
resources/views/produtos
Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
103
Editando registro
Nesse caso, fizemos poucas alterações em relação ao arquivo
create.blade.php.
Alteramos o título da página para Editando Produto: Nome do produto
A action do form para: produtos/update
O Method do form de POST para PUT
O valor padrão dos campos dos formulários. Ex:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
104
Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
105
Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
106
Estão lembrados que mudamos o method do form de POST para PUT? Veja
abaixo, o código fonte gerado pelo formulário =)
• Perceba que o Laravel gerou automaticamente um campo hidden chamado
_method com o valor de PUT. Apesar de nosso browser enviar a requisição
via POST, o Laravel está a aguardar uma requisição do tipo PUT, e nesse
caso, ele fará a leitura do valor enviado pelo _method para se adequar.
• Falta apenas implementarmos nosso método de update para realizarmos a
alteração no base de dados.
Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
107
Para Proxima Semana
• Criar os formularios em Laravel e apresentar a todos na
proxima semana!
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
108

Mais conteúdo relacionado

Mais procurados

Desenvolvimento multiplataforma
Desenvolvimento multiplataformaDesenvolvimento multiplataforma
Desenvolvimento multiplataforma
stonefull
 
Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)
Fernando Gonçalves
 

Mais procurados (17)

Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Desenvolvimento multiplataforma
Desenvolvimento multiplataformaDesenvolvimento multiplataforma
Desenvolvimento multiplataforma
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
Lazarus Free
Lazarus FreeLazarus Free
Lazarus Free
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Introdução a projetos baseados em apache maven
Introdução a projetos baseados em apache mavenIntrodução a projetos baseados em apache maven
Introdução a projetos baseados em apache maven
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend framework
 
Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)
 
Artigo de php
Artigo de phpArtigo de php
Artigo de php
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Git e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código FácilGit e GitHub: Versionamento de Código Fácil
Git e GitHub: Versionamento de Código Fácil
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
O que é lazarus
O que é lazarusO que é lazarus
O que é lazarus
 

Destaque

Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
Italo Costa
 
présentation soutenance PFE.ppt
présentation soutenance PFE.pptprésentation soutenance PFE.ppt
présentation soutenance PFE.ppt
Mohamed Ben Bouzid
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Sofien Benrhouma
 

Destaque (10)

Laravel Blade
Laravel BladeLaravel Blade
Laravel Blade
 
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
Ecole ESMA : Projet Fin de semestre - Application de gestion d'une école - Di...
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
 
Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...Conception et réalisation d’un Système d’information des étudiants du départe...
Conception et réalisation d’un Système d’information des étudiants du départe...
 
Análise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de SequenciaAnálise Orientada a Objetos - Diagrama de Sequencia
Análise Orientada a Objetos - Diagrama de Sequencia
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
présentation soutenance PFE.ppt
présentation soutenance PFE.pptprésentation soutenance PFE.ppt
présentation soutenance PFE.ppt
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
 
Soutenance mémoire de fin d'études
Soutenance mémoire de fin d'étudesSoutenance mémoire de fin d'études
Soutenance mémoire de fin d'études
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Semelhante a Git hub and Laravel

Controle de versão
Controle de versãoControle de versão
Controle de versão
Zé Pereira
 

Semelhante a Git hub and Laravel (20)

Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
Docker de ponta a ponta: do Desenvolvimento à Nuvem - UNICID - Novembro-2019
 
WP Composer
WP ComposerWP Composer
WP Composer
 
Trac e SVN - Introdução
Trac e SVN - IntroduçãoTrac e SVN - Introdução
Trac e SVN - Introdução
 
Cvs everton
Cvs   evertonCvs   everton
Cvs everton
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
Controle de versão
Controle de versãoControle de versão
Controle de versão
 
Cake Php
Cake PhpCake Php
Cake Php
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Ai ad-tp3-g3
Ai ad-tp3-g3Ai ad-tp3-g3
Ai ad-tp3-g3
 
Componentizando a Web com Polymer
Componentizando a Web com PolymerComponentizando a Web com Polymer
Componentizando a Web com Polymer
 
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
Monitorando aplicações ASP.NET Core 2.2 com Health Checks, Application Insigh...
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de Software
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
 

Git hub and Laravel

  • 1. Git Sistema de Controle de Versão Git Comandos Básicos de Git 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 2. Sistemas de Controle de Versão 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 3. Sistema de Controle de Versão 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 4. • Registra mudanças feitas em um arquivo ou conjunto de arquivos ao longo do tempo; • É possível recuperar versões anteriores; • Verificar contribuições de cada membro no projeto; • Pode ser utilizado para qualquer coisa que se altera com o tempo, como CV, Software, Documentos Legais; • Ex: ”seguimento de revisão” do MS Word 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 5. Tipos de Sistemas de Controle de Versão Sistema de Controle de Versão Local 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 Sistema de Controle de Versão Centralizado
  • 6. Tipos de Sistemas de Controle de Versão Sistema de Gestão de Versão Distribuída • Qualquer um pode ser servidor; • Múltiplos Clientes Clonam repositórios completos; • O registro de alteração e diferente da aplicação da alteração; 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 7. Git 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 8. And then realize that nothing is perfect. Git is just *closer* to perfect than any other SCM out there. _ _ Linus 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 9. • 2002 - Linus Tovards usa BitKeeper para o controle de versões de Linux. • 6 de Abril de 2015 – Termina a licença de BitKeeper e Linus decide criar o seu próprio SCM • 18 de Abril de 2005 – GIT é laçando e já pode fundir códigos • 16 de Junho de 2005 - É oficialmente usado como SCM para Linux; • Sistema de Controle de Versão distribuído; • Mais Rápido e eficiente; • Melhores serviços de hospedagem de repositórios: github.com, bitbucket.com , gitlab.com, assembla.com , codebasehq.com 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 10. Diretório de Trabalho e Índices 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 Fonte: https://backlogtool.com/git-guide
  • 11. COMMITS, BRANCHES e TAGS • Commit é o estado do repositório corrente, o nome dado será pelo hash SHA1 do conteúdo do repositório. O comando utiliza se para passar o estado indexado para o repositório local. • Branches são usados para criar uma nova linha de desenvolvimento ou funcionalidades isoladas, por defeito todo o projeto vem com master branch. • Tags atribui um nome explicativo (Etiqueta) a uma versão específica do repositório. São imutáveis. (Uma branch que não se altera). 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 12. Clone ,Pull e Push • Clone – Cria uma instancia local do repositório completo. • Pull - copia as alterações de uma repositório remoto para um local. É usado para sincronização entre duas instancias de repositório. • Push - cópias mudanças de uma instância de repositório local para um remoto. Isto é usado para armazenar as alterações permanentemente no repositório Git. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 13. Git Commands 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 14. •Inicializar Git (Criar um repositório do seu projeto, uma pasta .git com todas as informações do repositório ) •git init •Adicionar todos os arquivos no projeto •git add . •git commit –m ”mensagem da alteração” •Ao alterar algum ficheiro, antes de commit •git add nome_ficheiro_ou_pasta 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 15. •Verificar o que aconteceu •git status •git log •Adicionar servidor para repositório remoto •git remote add hostname hosturl •Enviar todas alterações do seu repositório •git push hostname branchname 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 16. •Trabalhando com varias versões em paralelo •git branch novoramo • Cria uma nova branch •git checkout novoramo • Muda para a branch novoramo •Juntar os ramos •git merfe novoramo • Vai juntar o novoramo com o ramo que estiver 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 17. Recapitulando 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 18. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 19. Próximo Passos • Criar um repositório no GitHub para o projeto do treinamento e enviar o link do projeto para a equipa de formação. • https://guides.github.com/activities/hello-world/ • Git Flow ??? 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 20. Dados do codeafrica.org 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 21. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 22. Referencias • Loeliger, Jon, and Matthew McCullough. Version Control with Git: Powerful tools and techniques for collaborative software development. " O'Reilly Media, Inc.", 2012. "Git - The Simple Guide - No Deep Shit!". Rogerdudler.github.io. N.p., 2016. Web. 9 Apr. 2016. "Git Tutorial". www.tutorialspoint.com. N.p., 2016. Web. 9 Apr. 2016. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0
  • 23. Models Conceitos Primeiro CRUD 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 23
  • 24. Models • Diferentemente do que muita gente pensa, o conceito de Models é bem abrangente. Quando falamos de Models, estamos a falar de um participante que terá o objetivo de fazer qualquer consumo e transação de dados em nossa aplicação. • Vamos imaginar que desenvolveremos uma simples aplicação que fará a exibição de diversas informações sobre tweets. • Nesse caso, quem fará o consumo e a gestão das informações (dados) dos tweets para nossa aplicação, será exatamente nossa camada Model. • Entendam, quando falamos em Model, falamos em dados! 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 24
  • 25. Models • Quando falamos na camada de Model, muita gente já faz a associação direta de que são os Models que “cuidam” diretamente da parte da base de dados de nossa aplicação. • Na realidade, a parte da base de dados, é apenas uma, das mais diversas fontes de dados que nossa Model pode gerir, todavia, como é extremamente comum termos bases de dados atreladas as nossas aplicações, a associação entre Models e base de dados fica, muito mais evidente do que outras fontes de dados. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 25
  • 26. Models • De qualquer forma, sempre tenha em mente que quando estamos a falar de Models, estamos falando de qualquer tipo de fonte de dados, como: Webservice / API base de dados Arquivos textos entre outros 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 26
  • 27. Models no Laravel • Normalmente, quando estamos a falar de Models no Laravel, estamos falando de como faremos acesso as informações da base de dados em nossa aplicação, bem como faremos a disponibilização e transações com tais informações. • O Laravel possui um ORM chamado de Eloquent, o qual faz a relação direta entre as nossas classes de Model com nossas tabelas de base de dados. • Acredito que o grande goal do Eloquent, é a sua excepcional facilidade de uso, nesse ponto, mostraremos brevemente como você poderá fazer uso dessa poderosa ferramenta. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 27
  • 28. Configurando um base de dados • Como quase tudo no Laravel, fazer a configuração de um base de dados é algo extremamente simples. Basicamente, você terá de definir qual será o SGDB a ser utilizado e passar as informações de acesso e/ou credenciais. • O arquivo responsável por conter todos os SGDBs pré- configurados no Laravel é: config/database.php • Ele é composto por um array, onde facilmente poderá ser modificado. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 28
  • 29. Criando nosso primeiro Model • Criar um model no Laravel é algo extremamente simples, basta criar uma classe que estenda de IlluminateDatabaseEloquentModel, por outro lado, o framework nos traz diversas facilidades para que criemos nossos models, utilizando a linha de comando com o Artisan. Basta correr o comando: php artisan make:model Produto E terá o seguinte resultado: Model created successfully. Created Migration: 2016_04_09_213916_create_produtos_table 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 29
  • 30. Criando nosso primeiro Model O Artisan, acaba de criar dois arquivos: • Produto.php, dentro de nossa pasta app • 2015_04_20_213916_create_produtos_table.php, dentro da pasta database/migrations 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 30
  • 31. Falando brevemente sobre Migrations • O Laravel possui o recurso de migrations, onde tem o objetivo de gerir cada mudança estrutural da nossa base de dados, ou seja, para cada tabela, coluna, índice, criados em nosso base de dados, podemos ter uma migration para realizar essa operação de forma automática. • Um ponto bem interessante sobre migrations, é que temos exatamente cada versão da estrutura de nossa base de dados, logo, se sentirmos a necessidade, podemos facilmente dar um “roll back”. • Seguinte nosso exemplo do model criado: Produto, a migration 2016_04_09_213916_create_produtos_table foi criada: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 31
  • 32. Falando brevemente sobre Migrations 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 32
  • 33. Falando brevemente sobre Migrations • Se você perceber, temos dois métodos principais: up() e down(). O método up é executado quando a migration corre, já o método down, é executado cada vez que damos um roll back, nessa mesma migration. • Nesse nosso caso, perceba que a o método up está sendo responsável por uma tabela chamada de produtos. • Por padrão, tal tabela possuirá uma coluna: ID, auto_increment e outras duas colunas referentes a data / hora de inserção e alteração de um registro (created_at e updated_at). • Para que possamos seguir com nosso exemplo, adicionarei mais duas colunas em nossa tabela produtos: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 33
  • 34. Falando brevemente sobre Migrations 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 34 Feita essa nossa alteração, basta apenas corrermos os seguinte comandos via Artisan:
  • 35. Falando brevemente sobre Migrations • O comando migrate:install, cria uma tabela em nosso base de dados para poder gerir nossas migrations. • Já o comando migrate, executa todas as migrations disponíveis em nossa aplicação. • Pronto! Já temos uma tabela de base de dados criada, pronta para ser utilizada em conjunto com nosso Model Produto. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 35
  • 36. Brincando com nosso Model  • Se você abrir o arquivo de nosso Model, localizado em: app/Produto.php, você terá o seguinte resultado: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 36
  • 37. Brincando com nosso Model  • Apesar de ser um arquivo extremamente pequeno, ele estende de uma classe chamada Model, que possui uma infinidade de recursos para você manipular sua tabela de base de dados. • Vamos brincar um pouco com nosso Model, utilizando a o tinker, um console interativo, disponibilizado pelo próprio Laravel. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 37
  • 38. Brincando com nosso Model  • Perceba que ao acessarmos o tinker, criamos um objeto Produto (baseado em nosso Model), e definimos dois atributos: nome e descricao; depois disso, apenas executamos o método save() e pronto. Já temos nosso primeiro registro gravado em nossa base de dados! • Realmente é MUITO simples trabalhar com Models baseados no Eloquent. Mas nos cá no Training vamos um pouco além! 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 38
  • 39. Brincando com nosso Model  09/04/2016 Presentation licenced under non-commercial creative commons 3.0 39 • Ao chamarmos estaticamente o método all() de nosso model, perceba que recebemos uma coleção de modelos Produto (Eloquent), que nesse caso, é o produto que acabamos de inserir no base de dados. • Se quisermos, podemos selecionar apenas o Produto desejado, utilizando o método find().
  • 40. Brincando com nosso Model  • Nesse caso, o Model Produto, com o ID 1, foi atribuído em nossa variável $livro. • Podemos agora, fazer modificações nesse objeto e persisti-las novamente no base de dados: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 40 Pronto, mudamos facilmente a descrição de nosso produto. Vamos listar novamente os produtos, para ver se nossa modificação foi refletida:
  • 41. Brincando com nosso Model  09/04/2016 Presentation licenced under non-commercial creative commons 3.0 41
  • 42. Utilizando nosso Model no Controller • Agora que já demos nossos primeiros passos com nosso Model, vamos exibir tais informações no browser do usuário, seguindo exatamente o fluxo que vimos anteriormente, todavia, aplicando agora nossos conhecimentos sobre Models. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 42 • Perceba que estamos atribuindo para a variável produtos, uma coleção de produtos trazida pelo nosso Model, depois disso, apenas atribuímos tal coleção para nossa View (produtos.blade.php).
  • 43. Utilizando nosso Model no Controller 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 43
  • 44. Utilizando nosso Model no Controller 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 44 Vejam que utilizamos as tags do PHP para fazermos o foreach; para facilitar nossa vida, podemos utilizar o recurso de foreach do próprio Blade para facilitar! 
  • 45. Utilizando nosso Model no Controller 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 45
  • 46. Blade 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 46
  • 47. Contexto Problema •Todas as paginas HTML tem formato similar, como o rodapé, o cabeçalho, etc. E é custoso repetir o mesmo código varias vezes. Solução •Criar layouts blade 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 47
  • 48. Como é feito? No diretório da instalação do Laravel, verifique o ficheiro ../resources/view/welcome.blade.php 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 48
  • 49. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 49
  • 50. • Criamos os diretórios Layouts e Includes para adicionarmos os layouts das paginas e o include para os conteúdos mais usados pelos site. • mkdir layouts • mkdir includes 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 50
  • 51. • O código do cabeçalho é genérico o que podemos incluir num dos ficheiros para melhor ser reutilizado. Que vamos por no includes. ../view/includes/head.blade.php 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 51
  • 52. • Podemos criar um layout para ser usado, com a estrutura geral de HTML. No diretório layout. ../view/layout/default.blade.php 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 52 Yield(”secção") – Mostra conteúdo de secção que tem o mesmo nome do argumento; Include (ficheiro) – inclui o ficheiro de outro template
  • 53. • Vamos alterar o ficheiro welcome.blade.php de modo que use a nossa planilha e os ficheiros de inclusão ; 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 53 @extends – acrescenta a plantinha com um layout , deve ser o primeiro elemento de um template. @section(nome) – Inicia uma secção @stops – termina uma secção.
  • 54. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 54 • Agora no diretório do projeto é só executar php artisan serve
  • 55. O que mais Blade permite ? 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 55
  • 56. Mostrar variáveis de PHP {{ $var }} {{ $var or 'default' }} <?php echo $var; ?> 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 56
  • 57. Controle logico @if ($hora < 12 ) Bom dia @elseif ($hora < 20 ) Boa tarde @else Boa Noite @endif 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 57
  • 58. Controle logico @unless ($idade > 18) Pode comprar bebida alcoólica @endunless 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 58
  • 59. Comentários {{-- Isto é um comentário --}} Comentários em PHP serão renderizados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 59
  • 60. Controle de Estrutura For @for ($i =1 ; $1 <= 10 ; $i++) <p>{{ $i }} </p> @endfor 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 60
  • 61. Controle de Estrutura para Vetores <ul> @foreach ($items as $item) <li>{{ $item }} </li> @endforeach </ul> 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 61
  • 62. Controle de Estrutura para Vetores <ul> @foreach ($items as $name =>$item) <li>{{name}} - {{ $item }} </li> @endforeach </ul> 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 62
  • 63. Controle de Estrutura para Vetores <ul> @while ($item = array_pop($items)) <li> {{ $item }} </li> @endwhile </ul> 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 63
  • 64. Internacionalização da aplicação lang/en/saudacoes.php <?php return array( ‘Ola' => ’Hello', ’Adeus' => ’Good by’ ); ?> Welcome.blade.php • @lang(’saudacoes.Ola') 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 64
  • 65. Rumo ao primeiro CRUD 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 65
  • 66. Rumo ao primeiro CRUD • Normalmente, quem já possui uma certa experiência com desenvolvimento web, provavelmente já está familiarizado com o termo CRUD, que significa: Create, Retrieve, Update e Delete. • O CRUD nada mais é do que um termo utilizado representando as principais operações que podemos realizar em uma entidade, ou seja, Criar, Listar, Alterar e Remover dados. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 66
  • 67. Herdando um template • Acredito que vocês já devem ter se antecipado e feito a seguinte pergunta: Como podemos aproveitar um template (view) padrão para todas as nossas páginas, sem que precisemos ficar a duplicar a todo momento nosso HTML que nos serve como base de nossa aplicação? • A resposta para essa pergunta é: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 67
  • 68. Herdando um template • Essa é uma das grandes vantagens de você poder utilizar o Blade. O Blade possibilita que você herde suas views de um template principal a fim de facilitar o reaproveitamento de código. • Nossa view: produtos.blade.php encontra-se da seguinte forma: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 68
  • 69. Herdando um template 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 69 Nossa idéia, é utilizarmos um template padrão que o Laravel já nos trás para faciltiar nosso trabalho. ;)
  • 70. Herdando um template • Se analisar a pasta resources/views, encontrará um arquivo chamado app.blade.php, esse arquivo é o template padrão que o Laravel 5 nos trás para que possamos utilizar como base de nossa aplicação. • Ao abrir esse arquivo, quase no final, você encontrará a seguinte chamada: @yield(‘content’). Isso significa que se criarmos em nossa view, uma @section com o nome de content, e herdarmos o template app.blade.php, todo o conteúdo de nossa view aparecerá exatamente no local onde temos a chamada: @yield(‘content’). Para facilitar o entendimento, façamos isso na prática: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 70
  • 71. Herdando um template 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 71 Perceba que utilizamos o comando @extends do Blade para fazer com que nossa view produtos. blade.php possa herdar o template app.blade.php. Em seguida, utilizamos a chamada @section(‘content’) para definir que tudo que estiver dentro dela, será aplicado exatamente aonde temos a chamada @yield(‘content’) no template app.blade.php. Vejamos o resultado a seguir:
  • 72. Herdando um template 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 72 WOW! O Blade é mesmo mau…
  • 73. Fazendo a listagem em uma tabela 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 73
  • 74. Fazendo a listagem em uma tabela 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 74
  • 75. Criando página de “Create” 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 75
  • 76. Criando página de “Create” • Para facilitar a organização de nosso código, criaremos uma pasta chamada produtos dentro da pasta: • resources/views, dessa forma, saberemos que todas as views referentes ao nosso CRUD de produtos estarão armazenados nessa pasta. • Também renomearemos o arquivo: resources/views/produtos.blade.php para resources/views/produtos/index.blade.php • Nesse ponto, vamos criar o arquivo: create.blade.php: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 76
  • 77. Criando página de “Create” 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 77 Falta registrarmos uma nova rota apontando: produtos/create para essa nossa nova action. No arquivo routes.php faremos o seguinte registro:
  • 78. Criando página de “Create” 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 78
  • 79. Trabalhando com formulários no Laravel 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 79
  • 80. Instalando o Illuminate/Html • Já temos nossa página produtos/create pronta e preparada para receber nosso formulário. • Você possui duas opções nesse momento: Criar manualmente seus formulários HTML Utilizar a ajuda do componente Illuminate/Html do Laravel; • Nesse nosso caso, utilizaremos a segunda opção para termos mais agilidade no processo de criação dos formulários. • A idéia é instalarmos o pacote: Illuminate/Html • Para instalá-lo, basta o correr o seguinte comando via composer. Você terá o resultado similar ao exibido a seguir: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 80
  • 81. Instalando o Illuminate/Html 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 81
  • 82. Instalando o Illuminate/Html • Teremos que registrar esse pacote como um “Service Provider”, dessa forma o Laravel poderá encontrar esses componentes. • Para fazer isso, adicionem a seguinte linha ao final do array providers dentro do arquivo: config/app.php. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 82 Também, no mesmo arquivo, você terá que adicionar duas linhas no array de aliases:
  • 83. Instalando o Illuminate/Html 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 83
  • 84. Criando formulário 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 84 Ao acessarmos nossa aplicação na rota produtos/create, aparentemente nada terá mudado, porém, quando inspecionarmos o código fonte, poderemos perceber que os seguintes itens foram adicionados:
  • 85. Criando formulário 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 85 O Laravel, automaticamente, criou as tags <form> e ainda um elemento hidden como um token para proteger nosso formulário contra CSRF. Vamos agora adicionar os outros itens para nosso formulário ficar completo:
  • 86. Criando formulário 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 86
  • 87. Criando formulário 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 87
  • 88. A action “store” • Agora que já temos nosso formulário criado, precisamos criar uma nova action que será responsável por receber a request do nosso form e chamar nosso Model Produto para persistir os dados. • Também precisaremos registrar uma nova rota: produto/store. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 88 Também temos que realizar um pequeno ajuste em nosso arquivo create.blade.php para apontar o form para a nossa url produtos/store.
  • 89. A action “store” 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 89 Percebam que em nossa action store, estamos a receber por parâmetro um objeto request. Armazenamos todas as informações enviadas via form de nosso request na variável $input. Depois disso, chamamos o método create de nosso Model Produto, para inserir os dados na base de dados. Em seguida, redirecionamos o usuário para a listagem dos produtos novamente.
  • 90. A action “store” Mas a vida é uma caixinha de surpresas! Se você me acompanhou até aqui, vai se deparar seguinte erro ao submeter o formulário: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 90
  • 91. A action “store” • O Laravel trabalha com uma pequena proteção em seus models contra Mass Assigment, ou seja, quando atribuimos dados em massa, como no caso de termos passado todas as informações do form directamente. • Nesse caso, para permitir que possamos inserir os dados do form diretamente, temos que configurar nosso Model para aceitar a atribuição em massa de nossos dois campos: nome, descricao. Para isso, basta adicionar um atributo chamado $fillable na classe de nosso model Produto. 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 91
  • 92. Validando dados • Agora que já temos nosso formulário possibilitando a criação de novos registros, temos que poder validar as informações que estão sendo enviadas através das requisições. • O Laravel 5 possui um recurso que podemos chamar de Requests personalizadas, ou seja, criamos uma classe de Request e nela informamos os itens que devem ser validados. • Utilizaremos o artisan para gerar automaticamente essa classe: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 92
  • 93. Validando dados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 93 O arquivo ProdutoRequest.php foi criado na pasta app/Http/Requests:
  • 94. Validando dados • Perceba que temos dois métodos nessa classe: authorize() e rules(). • O método authorize() determina se temos autorização de realizar essa request, logo, se ele retornar true, quer dizer que ela pode ser executada. Entenda que você poderá colocar a regra que quiser para permitir ou não a requisição de determinado usuário. • Já o método rules(), é responsável por validar cada um dos dados enviados na request. • O Laravel 5 já possui uma série de validadores padrão que podem ser encontrados em sua Documentação Oficial. • Nesse caso, faremos as seguintes alterações em nossa classe ProdutoRequest: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 94
  • 95. Validando dados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 95
  • 96. Validando dados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 96 Agora basta injetarmos essa classe como parâmetro em nossa action store:
  • 97. Validando dados • Dessa forma, toda requisição que chegar diretamente para a action store, será validada pelo método rules() da request ProdutoRequest. • Agora, se você tentar criar um novo produto pelo formulário e não informar nenhum valor, você perceberá que não será redirecionado para a listagem de produtos e, aparentemente, nada acontece. • Só que na realidade, a nossa action store nem chegou a ser executada, uma vez que a requisição foi interrompida quando o ProdutoRequest fez a validação que não retornou de forma positiva. • Precisamos também informar ao usuário, quais informações estão incorretas e/ou faltantes, nesse caso, trabalharemos com a variável $errors, que armazena todos os erros de validação encontrados. • Adicionaremos o seguinte trecho de código no arquivo create.blade.php, verificando se há algum erro para se exibido, caso positivo, exibiremos os erros em uma lista: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 97
  • 98. Validando dados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 98
  • 99. Validando dados 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 99
  • 100. Removendo registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 100 Quando você acessar por exemplo: http:://localhost:8000/produtos/1/destroy, ele fará, automaticamente, a exclusão do produto, cujo ID seja igual a 1.
  • 101. Editando registro • O processo de edição de um registro é muito similar ao de alteração, principalmente se formos analisar a camada de visão. • O primeiro passo para fazer a edição de um registro, é entender o padrão das URIs que vamos utilizar 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 101 O padrão da rota é muito similar ao do destroy, porém, estamos a encaminhar o request para a action edit, para a mesma de trazer o formulário de edição, e a action update para efetivar a alteração na base de dados.
  • 102. Editando registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 102 Vamos agora criar a action edit: Veja que é um método extremamente simples, que pega o produto através do método find, e retorna o produto encontrado para nossa view. Nesse ponto, temos apenas que criar nosso arquivo: edit.blade.php, dentro da pasta resources/views/produtos
  • 103. Editando registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 103
  • 104. Editando registro Nesse caso, fizemos poucas alterações em relação ao arquivo create.blade.php. Alteramos o título da página para Editando Produto: Nome do produto A action do form para: produtos/update O Method do form de POST para PUT O valor padrão dos campos dos formulários. Ex: 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 104
  • 105. Editando registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 105
  • 106. Editando registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 106 Estão lembrados que mudamos o method do form de POST para PUT? Veja abaixo, o código fonte gerado pelo formulário =) • Perceba que o Laravel gerou automaticamente um campo hidden chamado _method com o valor de PUT. Apesar de nosso browser enviar a requisição via POST, o Laravel está a aguardar uma requisição do tipo PUT, e nesse caso, ele fará a leitura do valor enviado pelo _method para se adequar. • Falta apenas implementarmos nosso método de update para realizarmos a alteração no base de dados.
  • 107. Editando registro 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 107
  • 108. Para Proxima Semana • Criar os formularios em Laravel e apresentar a todos na proxima semana! 09/04/2016 Presentation licenced under non-commercial creative commons 3.0 108