Git hub and Laravel

AbneusaManuel 367 views 108 slides Aug 05, 2016
Slide 1
Slide 1 of 108
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108

About This Presentation

this presentation teaches how to work in groups in the same project remotly


Slide Content

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

Andthenrealizethatnothingisperfect.Gitis
just*closer*toperfectthananyotherSCMout
there.
__
Linus
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

•2002 -Linus Tovardsusa BitKeeperpara o controle de versões de
Linux.
•6 de Abril de 2015 –Termina a licença de BitKeepere 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 hashSHA1 do conteúdo do repositório. O comando utiliza
se para passar o estado indexado para o repositório local.
•Branchessão usados para criar uma nova linha de
desenvolvimento ou funcionalidades isoladas, por defeito todo
o projeto vem com masterbranch.
•Tagsatribui um nome explicativo (Etiqueta) a uma versão
específica do repositório. São imutáveis. (Uma branchque não
se altera).
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

Clone ,Pulle 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

GitCommands
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

•Inicializar Git(Criar um repositório do seu
projeto, uma pasta .gitcom todas as
informações do repositório )
•gitinit
•Adicionar todos os arquivos no projeto
•gitadd.
•gitcommit–m ”mensagem da alteração”
•Ao alterar algum ficheiro, antes de commit
•gitaddnome_ficheiro_ou_pasta
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

•Verificar o que aconteceu
•gitstatus
•gitlog
•Adicionar servidor para repositório remoto
•gitremoteaddhostnamehosturl
•Enviar todas alterações do seu repositório
•gitpushhostnamebranchname
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

•Trabalhando com varias versões em paralelo
•gitbranchnovoramo
•Cria uma nova branch
•gitcheckoutnovoramo
•Muda para a branchnovoramo
•Juntar os ramos
•gitmerfenovoramo
•Vai juntar o novoramocom 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 GitHubpara o projeto do treinamento e
enviar o link do projeto para a equipa de formação.
•https://guides.github.com/activities/hello-world/
•GitFlow???
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.VersionControl with
Git: Powerfultoolsand techniquesforcollaborativesoftware
development. " O'ReillyMedia, Inc.", 2012.
"Git-TheSimple Guide-No Deep Shit!". Rogerdudler.github.io.
N.p., 2016. Web. 9 Apr. 2016.
"GitTutorial". www.tutorialspoint.com. N.p., 2016. Web. 9 Apr.
2016.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0

Models
Conceitos
PrimeiroCRUD
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
23

Models
•Diferentementedoquemuitagentepensa,oconceitode
Modelsébemabrangente.QuandofalamosdeModels,
estamosafalardeumparticipantequeteráoobjetivodefazer
qualquerconsumoetransaçãodedadosemnossaaplicação.
•Vamosimaginarquedesenvolveremosumasimplesaplicação
quefaráaexibiçãodediversasinformaçõessobretweets.
•Nessecaso,quemfaráoconsumoeagestãodasinformações
(dados)dostweetsparanossaaplicação,seráexatamente
nossacamadaModel.
•Entendam,quandofalamosemModel,falamosemdados!
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
24

Models
•QuandofalamosnacamadadeModel,muitagentejáfaza
associaçãodiretadequesãoosModelsque“cuidam”
diretamentedapartedabasededadosdenossaaplicação.
•Narealidade,apartedabasededados,éapenasuma,das
maisdiversasfontesdedadosquenossaModelpodegerir,
todavia,comoéextremamentecomumtermosbasesdedados
atreladasasnossasaplicações,aassociaçãoentreModelse
basededadosfica,muitomaisevidentedoqueoutrasfontes
dedados.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
25

Models
•Dequalquerforma,sempretenhaemmentequequando
estamosafalardeModels,estamosfalandodequalquertipo
defontededados,como:
Webservice/API
basededados
Arquivostextos
entreoutros
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
26

Modelsno Laravel
•Normalmente,quandoestamosafalardeModelsnoLaravel,
estamosfalandodecomofaremosacessoasinformaçõesda
basededadosemnossaaplicação,bemcomofaremosa
disponibilizaçãoetransaçõescomtaisinformações.
•OLaravelpossuiumORMchamadodeEloquent,oqualfaza
relaçãodiretaentreasnossasclassesdeModelcomnossas
tabelasdebasededados.
•AcreditoqueograndegoaldoEloquent,éasuaexcepcional
facilidadedeuso,nesseponto,mostraremosbrevementecomo
vocêpoderáfazerusodessapoderosaferramenta.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
27

Configurando um base de dados
•ComoquasetudonoLaravel,fazeraconfiguraçãodeumbase
dedadoséalgoextremamentesimples.Basicamente,você
terádedefinirqualseráoSGDBaserutilizadoepassaras
informaçõesdeacessoe/oucredenciais.
•OarquivoresponsávelporcontertodososSGDBspré-
configuradosnoLaravelé:
config/database.php
•Eleécompostoporumarray,ondefacilmentepoderáser
modificado.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
28

Criando nosso primeiro Model
•CriarummodelnoLaraveléalgoextremamentesimples,bastacriar
umaclassequeestendadeIlluminateDatabaseEloquentModel,
poroutrolado,oframeworknostrazdiversasfacilidadesparaque
criemosnossosmodels,utilizandoalinhadecomandocomo
Artisan.Bastacorrerocomando:
phpartisanmake:modelProduto
Eteráoseguinteresultado:
Modelcreatedsuccessfully.
CreatedMigration: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
•OLaravelpossuiorecursodemigrations,ondetemoobjetivo
degerircadamudançaestruturaldanossabasededados,ou
seja,paracadatabela,coluna,índice,criadosemnossobase
dedados,podemosterumamigrationpararealizaressa
operaçãodeformaautomática.
•Umpontobeminteressantesobremigrations,équetemos
exatamentecadaversãodaestruturadenossabasededados,
logo,sesentirmosanecessidade,podemosfacilmentedarum
“rollback”.
•Seguintenossoexemplodomodelcriado:Produto,amigration
2016_04_09_213916_create_produtos_tablefoicriada:
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
•Sevocêperceber,temosdoismétodosprincipais:up()e
down().Ométodoupéexecutadoquandoamigrationcorre,já
ométododown,éexecutadocadavezquedamosumroll
back,nessamesmamigration.
•Nessenossocaso,percebaqueaométodoupestásendo
responsávelporumatabelachamadadeprodutos.
•Porpadrão,taltabelapossuiráumacoluna:ID,auto_increment
eoutrasduascolunasreferentesadata/horadeinserçãoe
alteraçãodeumregistro(created_ateupdated_at).
•Paraquepossamosseguircomnossoexemplo,adicionarei
maisduascolunasemnossatabelaprodutos:
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
Feitaessanossaalteração,bastaapenascorrermososseguintecomandosvia
Artisan:

Falando brevemente sobre Migrations
•Ocomandomigrate:install,criaumatabelaemnossobasede
dadosparapodergerirnossasmigrations.
•Jáocomandomigrate,executatodasasmigrationsdisponíveis
emnossaaplicação.
•Pronto!Játemosumatabeladebasededadoscriada,pronta
paraserutilizadaemconjuntocomnossoModelProduto.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
35

Brincando com nosso Model
•SevocêabriroarquivodenossoModel,localizadoem:
app/Produto.php,vocêteráoseguinteresultado:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
36

Brincando com nosso Model
•Apesardeserumarquivoextremamentepequeno,eleestende
deumaclassechamadaModel,quepossuiumainfinidadede
recursosparavocêmanipularsuatabeladebasededados.
•VamosbrincarumpoucocomnossoModel,utilizandoao
tinker,umconsoleinterativo,disponibilizadopelopróprio
Laravel.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
37

Brincando com nosso Model
•Percebaqueaoacessarmosotinker,criamosumobjeto
Produto(baseadoemnossoModel),edefinimosdoisatributos:
nomeedescricao;depoisdisso,apenasexecutamosométodo
save()epronto.Játemosnossoprimeiroregistrogravadoem
nossabasededados!
•RealmenteéMUITOsimplestrabalharcomModelsbaseados
noEloquent.
MasnoscánoTrainingvamosumpoucoalé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
•Aochamarmosestaticamenteométodoall()denossomodel,percebaquerecebemosuma
coleçãodemodelosProduto(Eloquent),quenessecaso,éoprodutoqueacabamosdeinserirno
basededados.
•Sequisermos,podemosselecionarapenasoProdutodesejado,utilizandoométodofind().

Brincando com nosso Model
•Nessecaso,oModelProduto,comoID1,foiatribuídoem
nossavariável$livro.
•Podemosagora,fazermodificaçõesnesseobjetoepersisti-las
novamentenobasededados:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
40
Pronto,mudamosfacilmenteadescriçãodenossoproduto.
Vamoslistarnovamenteosprodutos,paraversenossamodificaçãofoi
refletida:

Brincando com nosso Model
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
41

Utilizando nosso Modelno Controller
•AgoraquejádemosnossosprimeirospassoscomnossoModel,vamos
exibirtaisinformaçõesnobrowserdousuário,seguindoexatamenteo
fluxoquevimosanteriormente,todavia,aplicandoagoranossos
conhecimentossobreModels.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
42
•Percebaqueestamosatribuindoparaavariávelprodutos,umacoleçãode
produtostrazidapelonossoModel,depoisdisso,apenasatribuímostal
coleçãoparanossaView(produtos.blade.php).

Utilizando nosso Modelno Controller
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
43

Utilizando nosso Modelno Controller
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
44
VejamqueutilizamosastagsdoPHPparafazermosoforeach;parafacilitar
nossavida,podemosutilizarorecursodeforeachdopróprioBladeparafacilitar!

Utilizando nosso Modelno 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.
•mkdirlayouts
•mkdirincludes
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.phpde 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 phpartisanserve

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' }}
<?phpecho$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($itemsas $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($itemsas $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
returnarray(
‘Ola' => ’Hello',
’Adeus' => ’Goodby’);
?>
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,quemjápossuiumacertaexperiênciacom
desenvolvimentoweb,provavelmentejáestáfamiliarizadocom
otermoCRUD,quesignifica:Create,Retrieve,Updatee
Delete.
•OCRUDnadamaisédoqueumtermoutilizadorepresentando
asprincipaisoperaçõesquepodemosrealizaremuma
entidade,ouseja,Criar,Listar,AlterareRemoverdados.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
66

Herdando um template
•Acreditoquevocêsjádevemterseantecipadoefeitoa
seguintepergunta:Comopodemosaproveitarumtemplate
(view)padrãoparatodasasnossaspáginas,semque
precisemosficaraduplicaratodomomentonossoHTMLque
nosservecomobasedenossaaplicação?
•Arespostaparaessaperguntaé:
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
67

Herdando um template
•Essaéumadasgrandesvantagensdevocêpoderutilizaro
Blade.OBladepossibilitaquevocêherdesuasviewsdeum
templateprincipalafimdefacilitaroreaproveitamentode
código.
•Nossaview:produtos.blade.phpencontra-sedaseguinte
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 templatepadrão que o Laraveljá nos trás para faciltiarnosso trabalho. ;)

Herdando um template
•Seanalisarapastaresources/views,encontraráumarquivo
chamadoapp.blade.php,essearquivoéotemplatepadrão
queoLaravel5nostrásparaquepossamosutilizarcomobase
denossaaplicação.
•Aoabriressearquivo,quasenofinal,vocêencontraráa
seguintechamada:@yield(‘content’).Issosignificaquese
criarmosemnossaview,uma@sectioncomonomede
content,eherdarmosotemplateapp.blade.php,todoo
conteúdodenossaviewapareceráexatamentenolocalonde
temosachamada:@yield(‘content’).
Parafacilitaroentendimento,façamosissonaprá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
Percebaqueutilizamosocomando@extendsdoBladeparafazercomquenossa
viewprodutos.blade.phppossaherdarotemplateapp.blade.php.
Emseguida,utilizamosachamada@section(‘content’)paradefinirquetudoque
estiverdentrodela,seráaplicadoexatamenteaondetemosachamada
@yield(‘content’)notemplateapp.blade.php.Vejamosoresultadoaseguir:

Herdando um template
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
72
WOW! O Blade é mesmomau…

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.phppara
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/createpara essa nossa
nova action. No arquivo routes.phpfaremos 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átemosnossapáginaprodutos/createprontaepreparada
pararecebernossoformulário.
•Vocêpossuiduasopçõesnessemomento:
CriarmanualmenteseusformuláriosHTML
UtilizaraajudadocomponenteIlluminate/HtmldoLaravel;
•Nessenossocaso,utilizaremosasegundaopçãoparatermos
maisagilidadenoprocessodecriaçãodosformulários.
•Aidéiaéinstalarmosopacote:Illuminate/Html
•Parainstalá-lo,bastaocorreroseguintecomandovia
composer.Vocêteráoresultadosimilaraoexibidoaseguir:
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
•Teremosqueregistraressepacotecomoum“Service
Provider”,dessaformaoLaravelpoderáencontraresses
componentes.
•Parafazerisso,adicionemaseguintelinhaaofinaldoarray
providersdentrodoarquivo: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 arrayde
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
Aoacessarmosnossaaplicaçãonarotaprodutos/create,aparentementenada
terámudado,porém,quandoinspecionarmosocódigofonte,poderemos
perceberqueosseguintesitensforamadicionados:

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 tokenpara 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 actionque será responsável por receber a request
do nosso forme chamar nosso ModelProduto 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émtemosquerealizarumpequenoajusteemnossoarquivo
create.blade.phpparaapontaroformparaanossaurlprodutos/store.

A action“store”
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
89
Percebamqueemnossaactionstore,
estamosareceberporparâmetroum
objetorequest.
Armazenamostodasasinformações
enviadasviaformdenossorequestna
variável$input.
Depoisdisso,chamamosométodo
createdenossoModelProduto,para
inserirosdadosnabasededados.
Emseguida,redirecionamosousuário
paraalistagemdosprodutos
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”
•OLaraveltrabalhacomumapequenaproteçãoemseus
modelscontraMassAssigment,ouseja,quandoatribuimos
dadosemmassa,comonocasodetermospassadotodasas
informaçõesdoformdirectamente.
•Nessecaso,parapermitirquepossamosinserirosdadosdo
formdiretamente,temosqueconfigurarnossoModelpara
aceitaraatribuiçãoemmassadenossosdoiscampos:nome,
descricao.Paraisso,bastaadicionarumatributochamado
$fillablenaclassedenossomodelProduto.
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
91

Validando dados
•Agoraquejátemosnossoformuláriopossibilitandoacriação
denovosregistros,temosquepodervalidarasinformações
queestãosendoenviadasatravésdasrequisições.
•OLaravel5possuiumrecursoquepodemoschamarde
Requestspersonalizadas,ouseja,criamosumaclassede
Requestenelainformamosositensquedevemservalidados.
•Utilizaremosoartisanparagerarautomaticamenteessaclasse:
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.phpfoi 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 Laravel5 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 actionstore:

Validando dados
•Dessaforma,todarequisiçãoquechegardiretamenteparaaaction
store,serávalidadapelométodorules()darequestProdutoRequest.
•Agora,sevocêtentarcriarumnovoprodutopeloformulárioenão
informarnenhumvalor,vocêperceberáquenãoseráredirecionado
paraalistagemdeprodutose,aparentemente,nadaacontece.
•Sóquenarealidade,anossaactionstorenemchegouaser
executada,umavezquearequisiçãofoiinterrompidaquandoo
ProdutoRequestfezavalidaçãoquenãoretornoudeformapositiva.
•Precisamostambéminformaraousuário,quaisinformaçõesestão
incorretase/oufaltantes,nessecaso,trabalharemoscomavariável
$errors,quearmazenatodososerrosdevalidaçãoencontrados.
•Adicionaremososeguintetrechodecódigonoarquivo
create.blade.php,verificandoseháalgumerroparaseexibido,caso
positivo,exibiremososerrosemumalista:
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ê acessarpor exemplo: http:://localhost:8000/produtos/1/destroy, ele
fará, automaticamente, a exclusão do produto, cujo ID seja igual a 1.

Editando registro
•Oprocessodeediçãodeumregistroémuitosimilaraode
alteração,principalmenteseformosanalisaracamadade
visão.
•Oprimeiropassoparafazeraediçãodeumregistro,é
entenderopadrãodasURIsquevamosutilizar
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
101
Opadrãodarotaémuitosimilaraododestroy,porém,estamosa
encaminharorequestparaaactionedit,paraamesmadetrazero
formuláriodeedição,eaactionupdateparaefetivaraalteraçãona
basededados.

Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
102
Vamos agora criar a actionedit:
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 actiondo formpara: produtos/update
O Methoddo formde 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ãolembradosquemudamosomethoddoformdePOSTparaPUT?Veja
abaixo,ocódigofontegeradopeloformulário=)
•PercebaqueoLaravelgerouautomaticamenteumcampohiddenchamado
_methodcomovalordePUT.Apesardenossobrowserenviararequisição
viaPOST,oLaravelestáaaguardarumarequisiçãodotipoPUT,enesse
caso,elefaráaleituradovalorenviadopelo_methodparaseadequar.
•Faltaapenasimplementarmosnossométododeupdatepararealizarmosa
alteraçãonobasededados.

Editando registro
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
107

Para ProximaSemana
•CriarosformulariosemLaraveleapresentaratodosna
proximasemana!
09/04/2016
Presentation licenced under non-commercial creative
commons 3.0
108