SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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 BolachaRafael 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 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 CalisthenicsGuilherme Blanco
 
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 simplesOtávio Calaça Xavier
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPGuilherme Blanco
 
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áveisCarlos Santos
 
Orientação a Objetos em PHP
Orientação a Objetos em PHPOrientação a Objetos em PHP
Orientação a Objetos em PHPzehzinho
 
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-7iMasters
 
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 OracleAndré 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, dia3garux
 
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 completaEduardo Bregaida
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 

Mais procurados (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
 

Semelhante a 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 pareceImpacta Eventos
 
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 - 2014Michael 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 07Yuri 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 PagSeguroMichael 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 PHPUnitDiego Tremper
 
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 JavascriptMichel Ribeiro
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidademetzen
 
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çãoAntonio Spinelli
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Douglas V. Pasqua
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo realiMasters
 
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 dadosHenrique Fernandes
 
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 AuraFlá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 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 IIinfo_cimol
 

Semelhante a 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
 

Mais de Michael Castillo Granados

Mais de 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
 

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)