Transcript
Page 1: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Aplicações PHP 5.4 com componentes Aura

Flávio Gomes da Silva Lisboa@fgsl

Page 2: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 3: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 4: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 5: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 6: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Zend Framework 1 Zend Framework 2

2008

Page 7: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

http://romocavaleirodoespaco.blogspot.com.br

Page 8: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

VAMOS COMEÇAR?

Page 9: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

O projeto Aura

●Código limpo;●Bibliotecas fracamente acopladas;●Pacotes independentes;●Em conformidade com os padrões PHP-FIG.

Page 10: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Código limpo

“Eu gosto que meu código seja elegante e eficiente. A lógica deve ser simples para que fique mais difícil para os bugs se esconder, as dependências devem ser mínimas para que haja facilidade de manutenção, o tratamento de erros deve estar completamente de acordo com uma estratégia articulada, e o desempenho deve estar próximo ao ideal de modo a não tentar as pessoas a tornar o código confuso com otimizações sem fundamento. Código limpo faz algo bem feito.”

Quem disse isso?

Page 11: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Código limpo

Bjarne Stroustrup, criador do C++

Page 12: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Fraco acoplamento

Page 13: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Padrões

“Eu penso em padrões como algo que pode ajudar pessoas a pensarem de modo orientado a objetos”

Erich Gamma

Page 14: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

O caso de uso

● Um cadastro de alunos.

● Matrícula e nome.

● Inclusão, alteração, exclusão e recuperação.

● Apache + PHP + MySQL

Page 15: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Sugestão: XAMPP

http://www.apachefriends.org/pt_br/xampp.html

Page 16: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

http://www.zend.com/en/company/community/pdt/downloads

Page 17: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

Page 18: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

Page 19: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Instalando o Composer

php -r

"eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

No webroot...

Page 20: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 21: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 22: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 23: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Abrindo o projeto

Page 24: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Abrindo o projeto

Page 25: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 26: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 27: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 28: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 29: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Redirecionando

escola-aura\.htaccess

RewriteEngine onRewriteRule .* web/index.php

Page 30: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

Page 31: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

Page 32: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

<?php

namespace Escola\Package\Web\Home;

use Aura\Framework\Web\Controller\AbstractPage;

class HomePage extends AbstractPage { public function actionIndex() { $this->view = 'index'; }}

Page 33: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando a visão

Page 34: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando a visão

<h1>Cadastro de Alunos</h1>

Page 35: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Configurando a rota

<?php/** * * Overrides for 'default' config mode. * * @var Aura\Framework\System $system Aura system directories; when cast to * a string, the Aura system root directory. * * @var Aura\Autoload\Loader $loader The autoloader for the system. * * @var Aura\Di\Container $di The DI container for the system. * */// attach the path for a route named 'home' to the controller and action$di->params ['Aura\Router\Map'] ['attach'] [''] = [ // all routes with the '' path prefix (i.e., no prefix) 'routes' => [ // a route named 'home' 'home' => [ 'path' => '/escola-aura/', 'values' => [ 'controller' => 'home', 'action' => 'index' ] ]

] ];

// map the 'home' controller value to the controller class$di->params ['Aura\Framework\Web\Controller\Factory'] ['map'] ['home'] = 'Escola\Package\Web\Home\HomePage';?>

Page 36: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Nosso alô mundo

Cadastro de Alunos

http://localhost/escola-aura/

Page 37: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um layout único

/escola-aura/include/Escola/Package/Web/Home/views/layout.php

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Escola Aura</title></head><body><h1>Cadastro de Alunos</h1><?php include $this->find($this->content)?></body></html>

Page 38: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um layout único

/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">Incluir aluno</a>

Page 39: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Gerando rotas

public function actionIndex(){

$this->view = 'layout';$this->data = [

'content' => 'index','url' => $this->router->generate('edit')

];}

Page 40: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definindo rotas

// a route named 'edit''edit' => [

'path' => '/escola-aura/edit/{:matricula}','values' => [

'controller' => 'home','action' => 'edit', 'matricula' => 0

],'params' => [

'matricula' => '(\d+)']

],

/escola-aura/config/default.php

Page 41: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Controle de edição

public function actionEdit(){

$this->view = 'layout';$this->data = [

'content' => 'edit','action' => $this->router->generate('save')

];}

Page 42: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Visão de edição

<form action="<?php echo $this->action?>" method="post">Nome: <input type="text" name="nome" autofocus="autofocus"><input type="hidden" name="matricula"><input type="submit" value="gravar"> </form>

/escola-aura/include/Escola/Package/Web/Home/views/edit.php

Page 43: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Nossa tabela

CREATE TABLE IF NOT EXISTS `alunos` ( `matricula` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(30) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`matricula`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Banco de dados "escola-aura"

Page 44: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definição de rota de inclusão

// a route named 'save''save' => [

'path' => '/escola-aura/save','values' => [

'controller' => 'home','action' => 'save'

] ],

/escola-aura/config/default.php

Page 45: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de inclusão

public function actionSave(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$insert = $connection->newInsert();

$insert->into('alunos')->cols(['nome']);

$bind = ['nome'=> $this->getContext()->getPost('nome')];

$stmt = $connection->query($insert, $bind);

$this->response->setRedirect($this->router->generate('home'));}

Page 46: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Conexão com banco de dados

$di->set('database',function(){$connection_factory = include realpath(__DIR__ . '/../package/Aura.Sql/scripts') . DIRECTORY_SEPARATOR . 'instance.php';;$connection = $connection_factory->newInstance(

// adapter name'mysql',

// DSN elements for PDO; this can also be// an array of key-value pairs'host=localhost;dbname=escola-aura',

// username for the connection'root',

// password for the connection'xampp');return $connection;});

$GLOBALS['di'] = $di;

/escola-aura/config/default.php

Page 47: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

public function actionIndex(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$select = $connection->newSelect();

$select->cols(['*'])->from('alunos');

$this->view = 'layout';$this->data = [

'content' => 'index','url' => $this->router->generate('edit'),

'list' => $connection->fetchAll($select)];

}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 48: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 49: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

Page 50: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Geração de rota de alteração

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th><th colspan="2">&nbsp;</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td><td><a href="<?=$this->route('edit', ['matricula' => $item['matricula']])?>">alterar</a></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 51: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de alteração

public function actionEdit(){

$aluno = ['matricula' => 0,'nome' => ''

];

if ($matricula = $this->getParams()['matricula']){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$select = $connection->newSelect();

$select->cols(['*'])->from('alunos')->where('matricula = :matricula');

$aluno = $connection->fetchOne($select,['matricula' => $matricula]);}

$this->view = 'layout';$this->data = [

'aluno' => $aluno,'content' => 'edit','action' => $this->router->generate('save')

];}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 52: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de gravação

public function actionSave(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$matricula = $this->getContext()->getPost('matricula',0);if ($matricula == 0){

$verb = $connection->newInsert();

$verb->into('alunos')->cols(['nome']);

$bind = ['nome'=> $this->getContext()->getPost('nome')];}else{

$verb = $connection->newUpdate();

$verb->table('alunos')->set('nome',':nome')->where('matricula = :matricula');

$nome = $this->getContext()->getPost('nome');

$bind = ['matricula' => $matricula, 'nome' => $nome];}

$stmt = $connection->query($verb, $bind);

$this->response->setRedirect($this->router->generate('home'));}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 53: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definição de rota de exclusão

// a route named 'delete''delete' => [

'path' => '/escola-aura/delete/{:matricula}','values' => [

'controller' => 'home','action' => 'delete','matricula' => 0

],'params' => [

'matricula' => '(\d+)' ]

]

/escola-aura/config/default.php

Page 54: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Geração de rota de exclusão

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th><th colspan="2">&nbsp;</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td><td><a href="<?=$this->route('edit', ['matricula' => $item['matricula']])?>">alterar</a></td><td><a href="<?=$this->route('delete', ['matricula' => $item['matricula']])?>">excluir</a></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 55: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de exclusão

public function actionDelete(){

$matricula = $this->getParams()['matricula'];if ($matricula > 0){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$delete = $connection->newDelete();

$delete->from('alunos')->where('matricula = :matricula');

$bind = ['matricula' => $matricula];

$connection->query($delete,$bind);}

$this->response->setRedirect($this->router->generate('home'));}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 56: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Você pode ainda...

● Definir regras para entrada de dados

● Criar formulários programaticamente

● Gerenciar a sessão com objetos

Page 57: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Perguntas?

Page 58: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Obrigado!

Page 59: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Aplicações PHP 5.4 com componentes Aura

Flávio Gomes da Silva Lisboa@fgsl

Page 60: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 61: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 62: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 63: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Page 64: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

Zend Framework 1 Zend Framework 2

2008

Page 65: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Quem sou eu?

http://romocavaleirodoespaco.blogspot.com.br

Page 66: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

VAMOS COMEÇAR?

Page 67: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

O projeto Aura

●Código limpo;●Bibliotecas fracamente acopladas;●Pacotes independentes;●Em conformidade com os padrões PHP-FIG.

Page 68: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Código limpo

“Eu gosto que meu código seja elegante e eficiente. A lógica deve ser simples para que fique mais difícil para os bugs se esconder, as dependências devem ser mínimas para que haja facilidade de manutenção, o tratamento de erros deve estar completamente de acordo com uma estratégia articulada, e o desempenho deve estar próximo ao ideal de modo a não tentar as pessoas a tornar o código confuso com otimizações sem fundamento. Código limpo faz algo bem feito.”

Quem disse isso?

Page 69: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Código limpo

Bjarne Stroustrup, criador do C++

Page 70: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Fraco acoplamento

Page 71: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Padrões

“Eu penso em padrões como algo que pode ajudar pessoas a pensarem de modo orientado a objetos”

Erich Gamma

Page 72: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

O caso de uso

● Um cadastro de alunos.

● Matrícula e nome.

● Inclusão, alteração, exclusão e recuperação.

● Apache + PHP + MySQL

Page 73: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Sugestão: XAMPP

http://www.apachefriends.org/pt_br/xampp.html

Page 74: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

http://www.zend.com/en/company/community/pdt/downloads

Page 75: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

Page 76: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ambiente de desenvolvimento

Page 77: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Instalando o Composer

php -r

"eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

No webroot...

Page 78: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 79: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 80: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um projeto Aura com Composer

Page 81: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Abrindo o projeto

Page 82: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Abrindo o projeto

Page 83: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 84: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 85: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 86: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Estrutura do projeto

Page 87: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Redirecionando

escola-aura\.htaccess

RewriteEngine onRewriteRule .* web/index.php

Page 88: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

Page 89: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

Page 90: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando o controlador

<?php

namespace Escola\Package\Web\Home;

use Aura\Framework\Web\Controller\AbstractPage;

class HomePage extends AbstractPage { public function actionIndex() { $this->view = 'index'; }}

Page 91: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando a visão

Page 92: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando a visão

<h1>Cadastro de Alunos</h1>

Page 93: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Configurando a rota

<?php/** * * Overrides for 'default' config mode. * * @var Aura\Framework\System $system Aura system directories; when cast to * a string, the Aura system root directory. * * @var Aura\Autoload\Loader $loader The autoloader for the system. * * @var Aura\Di\Container $di The DI container for the system. * */// attach the path for a route named 'home' to the controller and action$di->params ['Aura\Router\Map'] ['attach'] [''] = [ // all routes with the '' path prefix (i.e., no prefix) 'routes' => [ // a route named 'home' 'home' => [ 'path' => '/escola-aura/', 'values' => [ 'controller' => 'home', 'action' => 'index' ] ]

] ];

// map the 'home' controller value to the controller class$di->params ['Aura\Framework\Web\Controller\Factory'] ['map'] ['home'] = 'Escola\Package\Web\Home\HomePage';?>

Page 94: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Nosso alô mundo

Cadastro de Alunos

http://localhost/escola-aura/

Page 95: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um layout único

/escola-aura/include/Escola/Package/Web/Home/views/layout.php

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Escola Aura</title></head><body><h1>Cadastro de Alunos</h1><?php include $this->find($this->content)?></body></html>

Page 96: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Criando um layout único

/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">Incluir aluno</a>

Page 97: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Gerando rotas

public function actionIndex(){

$this->view = 'layout';$this->data = [

'content' => 'index','url' => $this->router->generate('edit')

];}

Page 98: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definindo rotas

// a route named 'edit''edit' => [

'path' => '/escola-aura/edit/{:matricula}','values' => [

'controller' => 'home','action' => 'edit', 'matricula' => 0

],'params' => [

'matricula' => '(\d+)']

],

/escola-aura/config/default.php

Page 99: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Controle de edição

public function actionEdit(){

$this->view = 'layout';$this->data = [

'content' => 'edit','action' => $this->router->generate('save')

];}

Page 100: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Visão de edição

<form action="<?php echo $this->action?>" method="post">Nome: <input type="text" name="nome" autofocus="autofocus"><input type="hidden" name="matricula"><input type="submit" value="gravar"> </form>

/escola-aura/include/Escola/Package/Web/Home/views/edit.php

Page 101: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Nossa tabela

CREATE TABLE IF NOT EXISTS `alunos` ( `matricula` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(30) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`matricula`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Banco de dados "escola-aura"

Page 102: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definição de rota de inclusão

// a route named 'save''save' => [

'path' => '/escola-aura/save','values' => [

'controller' => 'home','action' => 'save'

] ],

/escola-aura/config/default.php

Page 103: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de inclusão

public function actionSave(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$insert = $connection->newInsert();

$insert->into('alunos')->cols(['nome']);

$bind = ['nome'=> $this->getContext()->getPost('nome')];

$stmt = $connection->query($insert, $bind);

$this->response->setRedirect($this->router->generate('home'));}

Page 104: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Conexão com banco de dados

$di->set('database',function(){$connection_factory = include realpath(__DIR__ . '/../package/Aura.Sql/scripts') . DIRECTORY_SEPARATOR . 'instance.php';;$connection = $connection_factory->newInstance(

// adapter name'mysql',

// DSN elements for PDO; this can also be// an array of key-value pairs'host=localhost;dbname=escola-aura',

// username for the connection'root',

// password for the connection'xampp');return $connection;});

$GLOBALS['di'] = $di;

/escola-aura/config/default.php

Page 105: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

public function actionIndex(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$select = $connection->newSelect();

$select->cols(['*'])->from('alunos');

$this->view = 'layout';$this->data = [

'content' => 'index','url' => $this->router->generate('edit'),

'list' => $connection->fetchAll($select)];

}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 106: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 107: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Listagem de registros

Page 108: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Geração de rota de alteração

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th><th colspan="2">&nbsp;</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td><td><a href="<?=$this->route('edit', ['matricula' => $item['matricula']])?>">alterar</a></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 109: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de alteração

public function actionEdit(){

$aluno = ['matricula' => 0,'nome' => ''

];

if ($matricula = $this->getParams()['matricula']){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$select = $connection->newSelect();

$select->cols(['*'])->from('alunos')->where('matricula = :matricula');

$aluno = $connection->fetchOne($select,['matricula' => $matricula]);}

$this->view = 'layout';$this->data = [

'aluno' => $aluno,'content' => 'edit','action' => $this->router->generate('save')

];}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 110: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de gravação

public function actionSave(){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$matricula = $this->getContext()->getPost('matricula',0);if ($matricula == 0){

$verb = $connection->newInsert();

$verb->into('alunos')->cols(['nome']);

$bind = ['nome'=> $this->getContext()->getPost('nome')];}else{

$verb = $connection->newUpdate();

$verb->table('alunos')->set('nome',':nome')->where('matricula = :matricula');

$nome = $this->getContext()->getPost('nome');

$bind = ['matricula' => $matricula, 'nome' => $nome];}

$stmt = $connection->query($verb, $bind);

$this->response->setRedirect($this->router->generate('home'));}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 111: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Definição de rota de exclusão

// a route named 'delete''delete' => [

'path' => '/escola-aura/delete/{:matricula}','values' => [

'controller' => 'home','action' => 'delete','matricula' => 0

],'params' => [

'matricula' => '(\d+)' ]

]

/escola-aura/config/default.php

Page 112: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Geração de rota de exclusão

<a href="<?php echo $this->url?>">Incluir aluno</a><table><thead><tr><th>Matrícula</th><th>Nome</th><th colspan="2">&nbsp;</th></tr></thead><?phpforeach ($this->list as $item):?><tr><td><?=$item['matricula']?></td><td><?=$item['nome']?></td><td><a href="<?=$this->route('edit', ['matricula' => $item['matricula']])?>">alterar</a></td><td><a href="<?=$this->route('delete', ['matricula' => $item['matricula']])?>">excluir</a></td></tr><?phpendforeach; ?></table>

/escola-aura/include/Escola/Package/Web/Home/views/index.php

Page 113: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Ação de exclusão

public function actionDelete(){

$matricula = $this->getParams()['matricula'];if ($matricula > 0){

$connection = $GLOBALS['di']->get('database');$connection->connect();

$delete = $connection->newDelete();

$delete->from('alunos')->where('matricula = :matricula');

$bind = ['matricula' => $matricula];

$connection->query($delete,$bind);}

$this->response->setRedirect($this->router->generate('home'));}

/escola-aura/include/Escola/Package/Web/Home/HomePage.php

Page 114: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Você pode ainda...

● Definir regras para entrada de dados

● Criar formulários programaticamente

● Gerenciar a sessão com objetos

Page 115: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Perguntas?

Page 116: PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura

Obrigado!


Top Related