Académique Documents
Professionnel Documents
Culture Documents
Seja rpido
Quanto mais tempo demorar para comear sua startup mais voc estar jogando dinheiro fora! Inicie seu negcio enquanto antes, seu lucro s vir depois que voc se lanar definitivamente Desenvolvimento gil
Programador preguioso?
O seu trabalho deixar com que as pessoas faam menos esforos Inspire-se em voc mesmo
Uma idia!
e-commerce
E-commerce pronto?
Magento Joomla + VirtueMart WordPress + WP-shopping-cart Django + Sathmo Loja Locaweb OsCommerce PretaShop ...
O ambiente
O ambiente
Sistema de controle de verso - Subversion Linguagem forte e madura PHP Banco de dados MySQL Servidor Apache
Como funciona?
Como funciona?
FTP
Como funciona?
Skywalker
FTP
UPLOAD
Como funciona?
FTP
Como funciona?
Corrige BUG online
FTP
Como funciona?
FTP
Darth Vader
UPLOAD
Como funciona?
REPOSITRIO
Como funciona?
REPOSITRIO
1
Skywalker
Darth Vader
Como funciona?
REPOSITRIO
1
CHECKOUT
1 1
Como funciona?
REPOSITRIO
2
COMMIT
2 1
Como funciona?
REPOSITRIO
2
COMMIT
2 1
Como funciona?
REPOSITRIO
2
Como funciona?
REPOSITRIO
2
UPDATE
2 2
Como funciona?
REPOSITRIO
3
COMMIT
2 3
Como funciona?
REPOSITRIO CHECKOUT / UPDATE COMMITS SERVIDOR
Framework vantagens
Mtodos mgicos que auxiliam no desenvolvimento Regras que ajudam a manter a organizao dos arquivos geralmente MVC Gama de interfaces para bancos de dados Helpers que libertam-te de escrever cdigo Scripts que geram boa parte do cdigo Gerenciamento de cache deixando a aplicao mais rpida
Framework desvantagens
Voc precisa aprender uma nova lingua O fato dos scripts gerarem boa parte do cdigo interfere em sua criao Regras que nem sempre se aplicam a seu negcio Criao de demasiados arquivos que nem sempre so necessrios
Frameworks - exemplos
Proposta, um microframework
M de MVC Model
Iremos usar PDO (PHP Database Object) como base para o Model
Suporte para vrios bancos de dados Nativo desde o PHP5.2 Extensvel Orientado a Objetos Fcil de usar
Manipular Banco de Dados Mtodos mgicos definidos por voc Reaproveitamento de cdigo URLs amigveis Segurana Fcil de entender Simples de fazer manuteno
M de MVC Model
Vrios bancos, apenas um objeto new PDO(mysql:dbname=banco;host=localhost, usuario, senha); new PDO(sqlite:/opt/database/mydb.sq3);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
Abracadabra: a mgica!
$url = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/'; foreach ($urls as $regexp => $class) { if (preg_match("@$regexp@", $url, $atributos)) { if (class_exists($class)) { array_shift($atributos); $method = $_POST ? 'post' : 'get'; $class die(); } } } error(); = new $class; call_user_func_array(array($class, $method), $atributos);
O resultado!
class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
O resultado!
class Inicio { # controller 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 } }
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
Formas de pagamento
Boleto bancrio Carto de crdito Cartes de dbito Transao entre contas...
POST
E o tal do retorno?
Usurio - POST
E o tal do retorno?
Usurio - POST
Usurio - GET
E o tal do retorno?
Usurio - POST
Usurio - GET
Rob POST
E o tal do retorno?
Usurio - POST
Usurio - GET
Rob POST
E o tal do retorno?
Usurio - POST
Usurio - GET POST TOKEN Bad Guy POST? Rob POST VERIFICADO/FALSO
#comofas?
require_once('pagseguro/pgs.php'); $cod = uniqid(true); $pgs = new Pgs(array( 'email_cobranca' => 'mike@visie.com.br', 'tipo' )); => 'CP', 'ref_transacao' => $cod,
#comofas?
foreach ($_SESSION['carrinho'] as $id => $qtd) { $produto = $con->produto($id); $pgs->adicionar(array( 'id' 'descricao' 'valor' )); } => $produto->id, => $produto->nome, => $produto->valor,
Links
http://dgmike.com.br/lojasimples http://dgmike.com.br/lojasimples-trac http://slideshare.com/dgmike
Referncias
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