git hub and laravel

Post on 11-Apr-2017

107 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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

top related