this presentation teaches how to work in groups in the same project remotly
Size: 2.19 MB
Language: pt
Added: Aug 05, 2016
Slides: 108 pages
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
•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
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
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
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
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
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
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
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:
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”
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
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