git hub and laravel
TRANSCRIPT
Git
Sistema de Controle de Versão
Git
Comandos Básicos de Git
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
Sistemas de Controle de Versão
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
Sistema de Controle de Versão
09/04/2016Presentation 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/2016Presentation 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/2016Presentation 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/2016Presentation licenced under non-commercial creative
commons 3.0
Git
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
And then realize that nothing is perfect. Git isjust *closer* to perfect than any other SCM outthere.
_ _
Linus
09/04/2016Presentation 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/2016Presentation licenced under non-commercial creative
commons 3.0
Diretório de Trabalho e Índices
09/04/2016Presentation 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/2016Presentation 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/2016Presentation licenced under non-commercial creative
commons 3.0
Git Commands
09/04/2016Presentation 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/2016Presentation 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/2016Presentation 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/2016Presentation licenced under non-commercial creative
commons 3.0
Recapitulando
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
09/04/2016Presentation 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/2016Presentation licenced under non-commercial creative
commons 3.0
Dados do codeafrica.org
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
09/04/2016Presentation licenced under non-commercial creative
commons 3.0
Referencias
• Loeliger, Jon, and Matthew McCullough. Version Control withGit: 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/2016Presentation licenced under non-commercial creative
commons 3.0
ModelsConceitos
Primeiro CRUD
09/04/2016Presentation licenced under non-commercial creative
commons 3.023
Models
• Diferentemente do que muita gente pensa, o conceito deModels é bem abrangente. Quando falamos de Models,estamos a falar de um participante que terá o objetivo de fazerqualquer consumo e transação de dados em nossa aplicação.
• Vamos imaginar que desenvolveremos uma simples aplicaçãoque 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á exatamentenossa camada Model.
• Entendam, quando falamos em Model, falamos em dados!
09/04/2016Presentation licenced under non-commercial creative
commons 3.024
Models
• Quando falamos na camada de Model, muita gente já faz aassociaçã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, dasmais diversas fontes de dados que nossa Model pode gerir,todavia, como é extremamente comum termos bases de dadosatreladas as nossas aplicações, a associação entre Models ebase de dados fica, muito mais evidente do que outras fontesde dados.
09/04/2016Presentation licenced under non-commercial creative
commons 3.025
Models
• De qualquer forma, sempre tenha em mente que quandoestamos a falar de Models, estamos falando de qualquer tipode fonte de dados, como:Webservice / API
base de dados
Arquivos textos
entre outros
09/04/2016Presentation licenced under non-commercial creative
commons 3.026
Models no Laravel
• Normalmente, quando estamos a falar de Models no Laravel,estamos falando de como faremos acesso as informações dabase de dados em nossa aplicação, bem como faremos adisponibilização e transações com tais informações.
• O Laravel possui um ORM chamado de Eloquent, o qual faz arelação direta entre as nossas classes de Model com nossastabelas de base de dados.
• Acredito que o grande goal do Eloquent, é a sua excepcionalfacilidade de uso, nesse ponto, mostraremos brevemente comovocê poderá fazer uso dessa poderosa ferramenta.
09/04/2016Presentation licenced under non-commercial creative
commons 3.027
Configurando um base de dados
• Como quase tudo no Laravel, fazer a configuração de um basede dados é algo extremamente simples. Basicamente, vocêterá de definir qual será o SGDB a ser utilizado e passar asinformaçõ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á sermodificado.
09/04/2016Presentation licenced under non-commercial creative
commons 3.028
Criando nosso primeiro Model
• Criar um model no Laravel é algo extremamente simples, basta criaruma classe que estenda de IlluminateDatabaseEloquentModel,por outro lado, o framework nos traz diversas facilidades para quecriemos nossos models, utilizando a linha de comando com oArtisan. 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/2016Presentation licenced under non-commercial creative
commons 3.029
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/2016Presentation licenced under non-commercial creative
commons 3.030
Falando brevemente sobre Migrations
• O Laravel possui o recurso de migrations, onde tem o objetivode gerir cada mudança estrutural da nossa base de dados, ouseja, para cada tabela, coluna, índice, criados em nosso basede dados, podemos ter uma migration para realizar essaoperação de forma automática.
• Um ponto bem interessante sobre migrations, é que temosexatamente 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 migration2016_04_09_213916_create_produtos_table foi criada:
09/04/2016Presentation licenced under non-commercial creative
commons 3.031
Falando brevemente sobre Migrations
09/04/2016Presentation licenced under non-commercial creative
commons 3.032
Falando brevemente sobre Migrations
• Se você perceber, temos dois métodos principais: up() edown(). O método up é executado quando a migration corre, jáo método down, é executado cada vez que damos um rollback, nessa mesma migration.
• Nesse nosso caso, perceba que a o método up está sendoresponsável por uma tabela chamada de produtos.
• Por padrão, tal tabela possuirá uma coluna: ID, auto_incremente outras duas colunas referentes a data / hora de inserção ealteração de um registro (created_at e updated_at).
• Para que possamos seguir com nosso exemplo, adicionareimais duas colunas em nossa tabela produtos:
09/04/2016Presentation licenced under non-commercial creative
commons 3.033
Falando brevemente sobre Migrations
09/04/2016Presentation licenced under non-commercial creative
commons 3.034
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 dedados para poder gerir nossas migrations.
• Já o comando migrate, executa todas as migrations disponíveisem nossa aplicação.
• Pronto! Já temos uma tabela de base de dados criada, prontapara ser utilizada em conjunto com nosso Model Produto.
09/04/2016Presentation licenced under non-commercial creative
commons 3.035
Brincando com nosso Model
• Se você abrir o arquivo de nosso Model, localizado em:app/Produto.php, você terá o seguinte resultado:
09/04/2016Presentation licenced under non-commercial creative
commons 3.036
Brincando com nosso Model
• Apesar de ser um arquivo extremamente pequeno, ele estendede uma classe chamada Model, que possui uma infinidade derecursos para você manipular sua tabela de base de dados.
• Vamos brincar um pouco com nosso Model, utilizando a otinker, um console interativo, disponibilizado pelo próprioLaravel.
09/04/2016Presentation licenced under non-commercial creative
commons 3.037
Brincando com nosso Model
• Perceba que ao acessarmos o tinker, criamos um objetoProduto (baseado em nosso Model), e definimos dois atributos:nome e descricao; depois disso, apenas executamos o métodosave() e pronto. Já temos nosso primeiro registro gravado emnossa base de dados!
• Realmente é MUITO simples trabalhar com Models baseadosno Eloquent.
Mas nos cá no Training vamos um pouco além!
09/04/2016Presentation licenced under non-commercial creative
commons 3.038
Brincando com nosso Model
09/04/2016Presentation licenced under non-commercial creative
commons 3.039
• 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 emnossa variável $livro.
• Podemos agora, fazer modificações nesse objeto e persisti-lasnovamente no base de dados:
09/04/2016Presentation licenced under non-commercial creative
commons 3.040
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/2016Presentation licenced under non-commercial creative
commons 3.041
Utilizando nosso Model no Controller
• Agora que já demos nossos primeiros passos com nosso Model, vamosexibir tais informações no browser do usuário, seguindo exatamente ofluxo que vimos anteriormente, todavia, aplicando agora nossosconhecimentos sobre Models.
09/04/2016Presentation licenced under non-commercial creative
commons 3.042
• 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/2016Presentation licenced under non-commercial creative
commons 3.043
Utilizando nosso Model no Controller
09/04/2016Presentation licenced under non-commercial creative
commons 3.044
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/2016Presentation licenced under non-commercial creative
commons 3.045
Blade
09/04/2016Presentation licenced under non-commercial creative
commons 3.046
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/2016Presentation licenced under non-commercial creative
commons 3.047
Como é feito?
No diretório da instalação do Laravel, verifique o ficheiro ../resources/view/welcome.blade.php
09/04/2016Presentation licenced under non-commercial creative
commons 3.048
09/04/2016Presentation licenced under non-commercial creative
commons 3.049
• 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/2016Presentation licenced under non-commercial creative
commons 3.050
• 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/2016Presentation licenced under non-commercial creative
commons 3.051
• Podemos criar um layout para ser usado, com a estrutura geral de HTML. No diretório layout. ../view/layout/default.blade.php
09/04/2016Presentation licenced under non-commercial creative
commons 3.052
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/2016Presentation licenced under non-commercial creative
commons 3.053
@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/2016Presentation licenced under non-commercial creative
commons 3.054
• Agora no diretório do projeto é só executar php artisan serve
O que mais Bladepermite ?
09/04/2016Presentation licenced under non-commercial creative
commons 3.055
Mostrar variáveis de PHP
{{ $var }}
{{ $var or 'default' }}
<?php echo $var; ?>
09/04/2016Presentation licenced under non-commercial creative
commons 3.056
Controle logico
@if ($hora < 12 )
Bom dia
@elseif ($hora < 20 )
Boa tarde
@else
Boa Noite
@endif
09/04/2016Presentation licenced under non-commercial creative
commons 3.057
Controle logico
@unless ($idade > 18)
Pode comprar bebida alcoólica
@endunless
09/04/2016Presentation licenced under non-commercial creative
commons 3.058
Comentários
{{-- Isto é um comentário --}}
Comentários em PHP serão renderizados
09/04/2016Presentation licenced under non-commercial creative
commons 3.059
Controle de Estrutura For
@for ($i =1 ; $1 <= 10 ; $i++)
<p>{{ $i }} </p>
@endfor
09/04/2016Presentation licenced under non-commercial creative
commons 3.060
Controle de Estrutura para Vetores
<ul>
@foreach ($items as $item)
<li>{{ $item }} </li>
@endforeach
</ul>
09/04/2016Presentation licenced under non-commercial creative
commons 3.061
Controle de Estrutura para Vetores
<ul>
@foreach ($items as $name =>$item)
<li>{{name}} - {{ $item }} </li>
@endforeach
</ul>
09/04/2016Presentation licenced under non-commercial creative
commons 3.062
Controle de Estrutura para Vetores
<ul>
@while ($item = array_pop($items))
<li> {{ $item }} </li>
@endwhile
</ul>
09/04/2016Presentation licenced under non-commercial creative
commons 3.063
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/2016Presentation licenced under non-commercial creative
commons 3.064
Rumo ao primeiro CRUD
09/04/2016Presentation licenced under non-commercial creative
commons 3.065
Rumo ao primeiro CRUD
• Normalmente, quem já possui uma certa experiência comdesenvolvimento web, provavelmente já está familiarizado como termo CRUD, que significa: Create, Retrieve, Update eDelete.
• O CRUD nada mais é do que um termo utilizado representandoas principais operações que podemos realizar em umaentidade, ou seja, Criar, Listar, Alterar e Remover dados.
09/04/2016Presentation licenced under non-commercial creative
commons 3.066
Herdando um template
• Acredito que vocês já devem ter se antecipado e feito aseguinte pergunta: Como podemos aproveitar um template(view) padrão para todas as nossas páginas, sem queprecisemos ficar a duplicar a todo momento nosso HTML quenos serve como base de nossa aplicação?
• A resposta para essa pergunta é:
09/04/2016Presentation licenced under non-commercial creative
commons 3.067
Herdando um template
• Essa é uma das grandes vantagens de você poder utilizar oBlade. O Blade possibilita que você herde suas views de umtemplate principal a fim de facilitar o reaproveitamento decódigo.
• Nossa view: produtos.blade.php encontra-se da seguinteforma:
09/04/2016Presentation licenced under non-commercial creative
commons 3.068
Herdando um template
09/04/2016Presentation licenced under non-commercial creative
commons 3.069
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 arquivochamado app.blade.php, esse arquivo é o template padrãoque o Laravel 5 nos trás para que possamos utilizar como basede nossa aplicação.
• Ao abrir esse arquivo, quase no final, você encontrará aseguinte chamada: @yield(‘content’). Isso significa que secriarmos em nossa view, uma @section com o nome decontent, e herdarmos o template app.blade.php, todo oconteúdo de nossa view aparecerá exatamente no local ondetemos a chamada: @yield(‘content’).
Para facilitar o entendimento, façamos isso na prática:
09/04/2016Presentation licenced under non-commercial creative
commons 3.070
Herdando um template
09/04/2016Presentation licenced under non-commercial creative
commons 3.071
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/2016Presentation licenced under non-commercial creative
commons 3.072
WOW! O Blade é mesmo mau…
Fazendo a listagem em uma tabela
09/04/2016Presentation licenced under non-commercial creative
commons 3.073
Fazendo a listagem em uma tabela
09/04/2016Presentation licenced under non-commercial creative
commons 3.074
Criando página de “Create”
09/04/2016Presentation licenced under non-commercial creative
commons 3.075
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 viewsreferentes 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/2016Presentation licenced under non-commercial creative
commons 3.076
Criando página de “Create”
09/04/2016Presentation licenced under non-commercial creative
commons 3.077
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/2016Presentation licenced under non-commercial creative
commons 3.078
Trabalhando com formulários no Laravel
09/04/2016Presentation licenced under non-commercial creative
commons 3.079
Instalando o Illuminate/Html
• Já temos nossa página produtos/create pronta e preparadapara 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 termosmais 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 viacomposer. Você terá o resultado similar ao exibido a seguir:
09/04/2016Presentation licenced under non-commercial creative
commons 3.080
Instalando o Illuminate/Html
09/04/2016Presentation licenced under non-commercial creative
commons 3.081
Instalando o Illuminate/Html
• Teremos que registrar esse pacote como um “ServiceProvider”, dessa forma o Laravel poderá encontrar essescomponentes.
• Para fazer isso, adicionem a seguinte linha ao final do arrayproviders dentro do arquivo: config/app.php.
09/04/2016Presentation licenced under non-commercial creative
commons 3.082
Também, no mesmo arquivo, você terá que adicionar duas linhas no array de
aliases:
Instalando o Illuminate/Html
09/04/2016Presentation licenced under non-commercial creative
commons 3.083
Criando formulário
09/04/2016Presentation licenced under non-commercial creative
commons 3.084
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/2016Presentation licenced under non-commercial creative
commons 3.085
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/2016Presentation licenced under non-commercial creative
commons 3.086
Criando formulário
09/04/2016Presentation licenced under non-commercial creative
commons 3.087
A action “store”
• Agora que já temos nosso formulário criado, precisamos criar uma nova action que será responsável por receber a requestdo nosso form e chamar nosso Model Produto para persistir os dados.
• Também precisaremos registrar uma nova rota: produto/store.
09/04/2016Presentation licenced under non-commercial creative
commons 3.088
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/2016Presentation licenced under non-commercial creative
commons 3.089
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/2016Presentation licenced under non-commercial creative
commons 3.090
A action “store”
• O Laravel trabalha com uma pequena proteção em seusmodels contra Mass Assigment, ou seja, quando atribuimosdados em massa, como no caso de termos passado todas asinformações do form directamente.
• Nesse caso, para permitir que possamos inserir os dados doform diretamente, temos que configurar nosso Model paraaceitar 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/2016Presentation licenced under non-commercial creative
commons 3.091
Validando dados
• Agora que já temos nosso formulário possibilitando a criaçãode novos registros, temos que poder validar as informaçõesque estão sendo enviadas através das requisições.
• O Laravel 5 possui um recurso que podemos chamar deRequests personalizadas, ou seja, criamos uma classe deRequest e nela informamos os itens que devem ser validados.
• Utilizaremos o artisan para gerar automaticamente essa classe:
09/04/2016Presentation licenced under non-commercial creative
commons 3.092
Validando dados
09/04/2016Presentation licenced under non-commercial creative
commons 3.093
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/2016Presentation licenced under non-commercial creative
commons 3.094
Validando dados
09/04/2016Presentation licenced under non-commercial creative
commons 3.095
Validando dados
09/04/2016Presentation licenced under non-commercial creative
commons 3.096
Agora basta injetarmos essa classe como parâmetro em nossa action store:
Validando dados
• Dessa forma, toda requisição que chegar diretamente para a actionstore, será validada pelo método rules() da request ProdutoRequest.
• Agora, se você tentar criar um novo produto pelo formulário e nãoinformar nenhum valor, você perceberá que não será redirecionadopara a listagem de produtos e, aparentemente, nada acontece.
• Só que na realidade, a nossa action store nem chegou a serexecutada, uma vez que a requisição foi interrompida quando oProdutoRequest fez a validação que não retornou de forma positiva.
• Precisamos também informar ao usuário, quais informações estãoincorretas 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 arquivocreate.blade.php, verificando se há algum erro para se exibido, casopositivo, exibiremos os erros em uma lista:
09/04/2016Presentation licenced under non-commercial creative
commons 3.097
Validando dados
09/04/2016Presentation licenced under non-commercial creative
commons 3.098
Validando dados
09/04/2016Presentation licenced under non-commercial creative
commons 3.099
Removendo registro
09/04/2016Presentation licenced under non-commercial creative
commons 3.0100
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 dealteração, principalmente se formos analisar a camada devisão.
• O primeiro passo para fazer a edição de um registro, éentender o padrão das URIs que vamos utilizar
09/04/2016Presentation licenced under non-commercial creative
commons 3.0101
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/2016Presentation licenced under non-commercial creative
commons 3.0102
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/2016Presentation licenced under non-commercial creative
commons 3.0103
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/2016Presentation licenced under non-commercial creative
commons 3.0104
Editando registro
09/04/2016Presentation licenced under non-commercial creative
commons 3.0105
Editando registro
09/04/2016Presentation licenced under non-commercial creative
commons 3.0106
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/2016Presentation licenced under non-commercial creative
commons 3.0107
Para Proxima Semana
• Criar os formularios em Laravel e apresentar a todos naproxima semana!
09/04/2016Presentation licenced under non-commercial creative
commons 3.0108