SlideShare a Scribd company logo
Da argila ao forte:
como desenvolver uma loja virtual
O ambiente
•   Sistema Operacional (Windows, Linux, Mac)
•   Linguagem (PHP, óbvio)
•   Banco de dados (mysql, postgree, sqlite)
•   Controle de versão (SVN, GIT, Mercurial)
Controle de Versão


                        Repositório
                           FTP
Programador SkyWalker                 Programador Darth Vader
Controle de Versão


                            Repositório
                               FTP
Programador SkyWalker                     Programador Darth Vader


                        Upload
Controle de Versão

                                      Arruma o bug online


                        Repositório
                           FTP
Programador SkyWalker                           Programador Darth Vader
Controle de Versão


                        Repositório
                           FTP
Programador SkyWalker                     Programador Darth Vader

                                 Upload
Controle de Versão


                        Repositório
                           SVN
Programador SkyWalker                 Programador Darth Vader
Controle de Versão


                             Repositório
                                SVN
Programador SkyWalker                      Programador Darth Vader




                        Commit
Controle de Versão


                        Repositório
                           SVN
Programador SkyWalker                      Programador Darth Vader




                                  Commit
Controle de Versão


                        Repositório
                           SVN
Programador SkyWalker                      Programador Darth Vader




                                  Commit
Controle de Versão

                                      Update

                        Repositório
                           SVN
Programador SkyWalker                 Programador Darth Vader
Controle de Versão


                        Repositório
                           SVN
Programador SkyWalker                      Programador Darth Vader




                                  Commit
Controle de Versão


                    Update



Repositório                    Servidor online
   SVN




Commits
Ferramenta de Banco: PDO
• Consistente
• Um comando, vários bancos
• Fácil de usar

new PDO(‘mysql:dbname=banco;host=localhost’,
‘usuario’, ‘senha’);

new PDO(‘sqlite:/opt/database/mydb.sq3’);
O MVC
• Model (manipula o banco de dados)
• View (as telas em si)
• Controller (quem faz a coisa funcionar)
Um microframework
•   Manipula Banco de dados
•   Métodos mágicos definidos por você
•   Reaproveitamento de código
•   URLs amigáveis
•   Segurança
•   Fácil de entender
•   Simples de dar manutenção
Model
• PDO, claro!
Métodos auxiliares (helpers)
• Funções que serão chamadas quando necessário

function error(){
  die('Page not found.');
}

function url($url){
  return 'http://localhost/index.php/'.$url;
}
Mapeamento de URLs
$urls = array(
    '/?'                         =>   'Inicio',
    '/categoria/(d+)/?'         =>   'Categoria',
    '/produto/(d+)/?'           =>   'Produto',
    '/adiciona/(d+)/?'          =>   'Adiciona',
    '/adiciona/(d+)(/ajax)/?'   =>   'Adiciona',
    '/remove/(d+)/?'            =>   'Remove',
    '/carrinho/?'                =>   'Carrinho',
    '/comprar/?'                 =>   'Comprar',
    '/obrigado/?'                =>   'Retorno',
);
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
Fazendo a mágica
$url = $_SERVER['PATH_INFO'];

foreach ($urls as $key => $value) {
    $find = '@^'.$key.'$@';
    if (preg_match($find, $url, $attrs)) {
        array_shift($attrs);
        if (class_exists($value)) {
            $value = new $value;
            $method = $_POST ? 'post' : 'get‘;
            call_user_method_array($method, $value, $attrs);
            die();
        }
    }
}
erro();
O resultado
class Inicio
{
  function get($attr1, $attr2, $attr3)
  {
    // seu controller
  }

    function post()
    { // opcional

    }
}
O resultado
class Inicio
{
  function get($attr1, $attr2, $attr3)
  {
    // seu controller
  }

    function post()
    { // opcional

    }
}
O resultado
class Inicio
{
  function get($attr1, $attr2, $attr3)
  {
    // seu controller
  }

    function post()
    { // opcional

    }
}
O resultado
class Inicio
{
  function get($attr1, $attr2, $attr3)
  {
    // seu controller
  }

    function post()
    { // opcional

    }
}
Template
class Template {
   public $categorias = false;

    function __construct() {
      $con =& get_con();
      $this->categorias = $con->categorias();
      include('template/topo.php'); // View
    }

    function __destruct() {
      include('template/bottom.php');
    }
}
A home
class Inicio extends Template
{
   protected $_title = 'Bem vindo';
   function get()
   {
     $con =& get_con();
     $produtos = $con->prodRand();
     include('template/inicio.php');
   }
}
Adicionando um produto
class Adiciona {
   public function get($id, $ajax = false) {
     $con =& get_con();
     if (!$con->produto($id)) {
        error();
     }
     if (isset($_SESSION['carrinho'][$id])) {
        $_SESSION['carrinho'][$id]++;
     } else {
        $_SESSION['carrinho'][$id] = 1;
     }
     header('Location: '.url('carrinho'));
   }
}
E-commerce pronto?!
• Para que o e-commerce esteja pronto de fato,
  falta apenas um detalhe: o comprador deve
  comprar



Vamos por a mão na massa!!!
Formas de pagamento
•   Boleto bancário
•   Cartão de crédito
•   Cartões de débito
•   Transação entre contas



• ... ou usar o PagSeguro
POST
Usuário - POST
Usuário - POST



Usuário - GET
Usuário - POST



       Usuário - GET




Robô
POST
Usuário - POST



                 Usuário - GET


Bad Guy
  POST?
          Robô
          POST
Usuário - POST



                 Usuário - GET

                 POST – TOKEN
Bad Guy
  POST?
          Robô
          POST

                                  VERIFICADO/FALSO
Referências
•   http://php.net/
•   http://br.php.net/pdo
•   http://subversion.tigris.org/
•   http://trac.edgewall.org/
•   http://visie.com.br/pagseguro
•   http://www.generatedata.com/
•   http://tinyurl.com/mkmu58 (W3C: HTML5)
Perguntas?!

http://meadiciona.com/dgmike

More Related Content

What's hot

JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
Rafael Afonso
 
Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)
Henrique Moody
 
Php
PhpPhp
Design patterns
Design patternsDesign patterns
Design patterns
DouglasSoaresAndrSch
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
Guilherme Blanco
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
André Willik Valenti
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
Python 04
Python 04Python 04
Python 04
Bruno Catão
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
Felipe Ribeiro
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
Carlos Santos
 
Jquery a technical overview
Jquery a technical overviewJquery a technical overview
Jquery a technical overview
Alexandre Marreiros
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
zehzinho
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
iMasters
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
André Reis
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
Ricardo Valeriano
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
garux
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
Eduardo Bregaida
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
Harlley Oliveira
 

What's hot (19)

JavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com BolachaJavaFX e Scala - Como Leite com Bolacha
JavaFX e Scala - Como Leite com Bolacha
 
Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)
 
Php
PhpPhp
Php
 
Design patterns
Design patternsDesign patterns
Design patterns
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Python 04
Python 04Python 04
Python 04
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
 
Jquery a technical overview
Jquery a technical overviewJquery a technical overview
Jquery a technical overview
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHP
 
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7PHP Experience 2016 - [Palestra] Keynote: PHP-7
PHP Experience 2016 - [Palestra] Keynote: PHP-7
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 

Similar to Da Argila Ao Forte - Como desenvolver uma loja virtual

Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Impacta Eventos
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
Thiago Rigo
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
Evandro Klimpel Balmant
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
Michael Castillo Granados
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
Yuri Bispo
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
Michael Castillo Granados
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
Diego Tremper
 
Rest Beer v2
Rest Beer v2Rest Beer v2
Rest Beer v2
Ivan Rosolen
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
metzen
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
Antonio Spinelli
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
Douglas V. Pasqua
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo real
iMasters
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
B&R Consultoria Empresarial
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
Henrique Fernandes
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
Victor Hugo Germano
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Flávio Lisboa
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
Aula 4 php
Aula 4 phpAula 4 php
Aula 4 php
sergio_henrique
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
info_cimol
 

Similar to Da Argila Ao Forte - Como desenvolver uma loja virtual (20)

Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Programação web ii aulas 06 e 07
Programação web ii   aulas 06 e 07Programação web ii   aulas 06 e 07
Programação web ii aulas 06 e 07
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Rest Beer v2
Rest Beer v2Rest Beer v2
Rest Beer v2
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo real
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Aula 4 php
Aula 4 phpAula 4 php
Aula 4 php
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 

More from Michael Castillo Granados

Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
Michael Castillo Granados
 
Docker compose
Docker composeDocker compose
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
Michael Castillo Granados
 
Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)
Michael Castillo Granados
 
Transformando o wp em uma loja virtual
Transformando o wp em uma loja virtualTransformando o wp em uma loja virtual
Transformando o wp em uma loja virtual
Michael Castillo Granados
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
Michael Castillo Granados
 

More from Michael Castillo Granados (6)

Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
Docker compose
Docker composeDocker compose
Docker compose
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)Design patterns: resolvendo problemas comuns (ruby)
Design patterns: resolvendo problemas comuns (ruby)
 
Transformando o wp em uma loja virtual
Transformando o wp em uma loja virtualTransformando o wp em uma loja virtual
Transformando o wp em uma loja virtual
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 

Recently uploaded

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 

Recently uploaded (8)

Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 

Da Argila Ao Forte - Como desenvolver uma loja virtual

  • 1. Da argila ao forte: como desenvolver uma loja virtual
  • 2.
  • 3. O ambiente • Sistema Operacional (Windows, Linux, Mac) • Linguagem (PHP, óbvio) • Banco de dados (mysql, postgree, sqlite) • Controle de versão (SVN, GIT, Mercurial)
  • 4. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader
  • 5. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader Upload
  • 6. Controle de Versão Arruma o bug online Repositório FTP Programador SkyWalker Programador Darth Vader
  • 7. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader Upload
  • 8. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader
  • 9. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  • 10. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  • 11. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  • 12. Controle de Versão Update Repositório SVN Programador SkyWalker Programador Darth Vader
  • 13. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  • 14. Controle de Versão Update Repositório Servidor online SVN Commits
  • 15. Ferramenta de Banco: PDO • Consistente • Um comando, vários bancos • Fácil de usar new PDO(‘mysql:dbname=banco;host=localhost’, ‘usuario’, ‘senha’); new PDO(‘sqlite:/opt/database/mydb.sq3’);
  • 16. O MVC • Model (manipula o banco de dados) • View (as telas em si) • Controller (quem faz a coisa funcionar)
  • 17. Um microframework • Manipula Banco de dados • Métodos mágicos definidos por você • Reaproveitamento de código • URLs amigáveis • Segurança • Fácil de entender • Simples de dar manutenção
  • 19. Métodos auxiliares (helpers) • Funções que serão chamadas quando necessário function error(){ die('Page not found.'); } function url($url){ return 'http://localhost/index.php/'.$url; }
  • 20. Mapeamento de URLs $urls = array( '/?' => 'Inicio', '/categoria/(d+)/?' => 'Categoria', '/produto/(d+)/?' => 'Produto', '/adiciona/(d+)/?' => 'Adiciona', '/adiciona/(d+)(/ajax)/?' => 'Adiciona', '/remove/(d+)/?' => 'Remove', '/carrinho/?' => 'Carrinho', '/comprar/?' => 'Comprar', '/obrigado/?' => 'Retorno', );
  • 21. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 22. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 23. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 24. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 25. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 26. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 27. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 28. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 29. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 30. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 31. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  • 32. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } } erro();
  • 33. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 34. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 35. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 36. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  • 37. Template class Template { public $categorias = false; function __construct() { $con =& get_con(); $this->categorias = $con->categorias(); include('template/topo.php'); // View } function __destruct() { include('template/bottom.php'); } }
  • 38. A home class Inicio extends Template { protected $_title = 'Bem vindo'; function get() { $con =& get_con(); $produtos = $con->prodRand(); include('template/inicio.php'); } }
  • 39. Adicionando um produto class Adiciona { public function get($id, $ajax = false) { $con =& get_con(); if (!$con->produto($id)) { error(); } if (isset($_SESSION['carrinho'][$id])) { $_SESSION['carrinho'][$id]++; } else { $_SESSION['carrinho'][$id] = 1; } header('Location: '.url('carrinho')); } }
  • 40. E-commerce pronto?! • Para que o e-commerce esteja pronto de fato, falta apenas um detalhe: o comprador deve comprar Vamos por a mão na massa!!!
  • 41. Formas de pagamento • Boleto bancário • Cartão de crédito • Cartões de débito • Transação entre contas • ... ou usar o PagSeguro
  • 42.
  • 43.
  • 44.
  • 45. POST
  • 48. Usuário - POST Usuário - GET Robô POST
  • 49. Usuário - POST Usuário - GET Bad Guy POST? Robô POST
  • 50. Usuário - POST Usuário - GET POST – TOKEN Bad Guy POST? Robô POST VERIFICADO/FALSO
  • 51. Referências • http://php.net/ • http://br.php.net/pdo • http://subversion.tigris.org/ • http://trac.edgewall.org/ • http://visie.com.br/pagseguro • http://www.generatedata.com/ • http://tinyurl.com/mkmu58 (W3C: HTML5)