Aplicações PHP 5.4 com
componentes Aura
Flávio Gomes da Silva Lisboa
@fgsl
Quem sou eu?
Quem sou eu?
Quem sou eu?
Quem sou eu?
Quem sou eu?

2008

Zend Framework 1

Zend Framework 2
Quem sou eu?
http://romocavaleirodoespaco.blogspot.com.br
VAMOS COMEÇAR?
O projeto Aura

Código limpo;
●Bibliotecas fracamente acopladas;
●Pacotes independentes;
●Em conformidade com os padrões
P...
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 par...
Código limpo

Bjarne Stroustrup, criador do C++
Fraco acoplamento
Padrões
“Eu penso em padrões como algo que pode ajudar
pessoas a pensarem de modo orientado a objetos”
Erich Gamma
O caso de uso
●

Um cadastro de alunos.

●

Matrícula e nome.

●

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

●

Apache ...
Sugestão: XAMPP

http://www.apachefriends.org/pt_br/xampp.html
Ambiente de desenvolvimento

http://www.zend.com/en/company/community/pdt/downloads
Ambiente de desenvolvimento
Ambiente de desenvolvimento
Instalando o Composer
php -r
"eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

No webroot...
Criando um projeto Aura com Composer
Criando um projeto Aura com Composer
Criando um projeto Aura com Composer
Abrindo o projeto
Abrindo o projeto
Estrutura do projeto
Estrutura do projeto
Estrutura do projeto
Estrutura do projeto
Redirecionando

escola-aura.htaccess
RewriteEngine on
RewriteRule .* web/index.php
Criando o controlador
Criando o controlador
Criando o controlador

<?php
namespace EscolaPackageWebHome;
use AuraFrameworkWebControllerAbstractPage;
class HomePage ex...
Criando a visão
Criando a visão

<h1>Cadastro de Alunos</h1>
Configurando a rota
<?php
/**
*
* Overrides for 'default' config mode.
*
* @var AuraFrameworkSystem $system Aura system di...
Nosso alô mundo
http://localhost/escola-aura/

Cadastro de Alunos
Criando um layout único
/escola-aura/include/Escola/Package/Web/Home/views/layout.php

<!DOCTYPE html>
<html>
<head>
<meta...
Criando um layout único
/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">In...
Gerando rotas

public function actionIndex()
{
$this->view = 'layout';
$this->data = [
'content' => 'index',
'url' => $thi...
Definindo rotas
/escola-aura/config/default.php

// a route named 'edit'
'edit' => [
'path' => '/escola-aura/edit/{:matric...
Controle de edição

public function actionEdit()
{
$this->view = 'layout';
$this->data = [
'content' => 'edit',
'action' =...
Visão de edição
/escola-aura/include/Escola/Package/Web/Home/views/edit.php

<form action="<?php echo $this->action?>" met...
Nossa tabela

Banco de dados "escola-aura"

CREATE TABLE IF NOT EXISTS `alunos` (
`matricula` int(11) NOT NULL AUTO_INCREM...
Definição de rota de inclusão
/escola-aura/config/default.php

// a route named 'save'
'save' => [
'path' => '/escola-aura...
Ação de inclusão

public function actionSave()
{
$connection = $GLOBALS['di']->get('database');
$connection->connect();
$i...
Conexão com banco de dados
/escola-aura/config/default.php
$di->set('database',function(){
$connection_factory = include r...
Listagem de registros
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionIndex()
{
$connectio...
Listagem de registros
/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">Incl...
Listagem de registros
Geração de rota de alteração
/escola-aura/include/Escola/Package/Web/Home/views/index.php
<a href="<?php echo $this->url?>...
Ação de alteração
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionEdit()
{
$aluno = [
'mat...
Ação de gravação
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionSave()
{
$connection = $G...
Definição de rota de exclusão
/escola-aura/config/default.php

// a route named 'delete'
'delete' => [
'path' => '/escola-...
Geração de rota de exclusão
/escola-aura/include/Escola/Package/Web/Home/views/index.php
<a href="<?php echo $this->url?>"...
Ação de exclusão
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionDelete()
{
$matricula = $...
Você pode ainda...
●

Definir regras para entrada de dados

●

Criar formulários programaticamente

●

Gerenciar a sessão ...
Perguntas?
Obrigado!
Aplicações PHP 5.4 com
componentes Aura
Flávio Gomes da Silva Lisboa
@fgsl
Quem sou eu?
Quem sou eu?
Quem sou eu?
Quem sou eu?
Quem sou eu?

2008

Zend Framework 1

Zend Framework 2
Quem sou eu?
http://romocavaleirodoespaco.blogspot.com.br
VAMOS COMEÇAR?
O projeto Aura

Código limpo;
●Bibliotecas fracamente acopladas;
●Pacotes independentes;
●Em conformidade com os padrões
P...
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 par...
Código limpo

Bjarne Stroustrup, criador do C++
Fraco acoplamento
Padrões
“Eu penso em padrões como algo que pode ajudar
pessoas a pensarem de modo orientado a objetos”
Erich Gamma
O caso de uso
●

Um cadastro de alunos.

●

Matrícula e nome.

●

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

●

Apache ...
Sugestão: XAMPP

http://www.apachefriends.org/pt_br/xampp.html
Ambiente de desenvolvimento

http://www.zend.com/en/company/community/pdt/downloads
Ambiente de desenvolvimento
Ambiente de desenvolvimento
Instalando o Composer
php -r
"eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

No webroot...
Criando um projeto Aura com Composer
Criando um projeto Aura com Composer
Criando um projeto Aura com Composer
Abrindo o projeto
Abrindo o projeto
Estrutura do projeto
Estrutura do projeto
Estrutura do projeto
Estrutura do projeto
Redirecionando

escola-aura.htaccess
RewriteEngine on
RewriteRule .* web/index.php
Criando o controlador
Criando o controlador
Criando o controlador

<?php
namespace EscolaPackageWebHome;
use AuraFrameworkWebControllerAbstractPage;
class HomePage ex...
Criando a visão
Criando a visão

<h1>Cadastro de Alunos</h1>
Configurando a rota
<?php
/**
*
* Overrides for 'default' config mode.
*
* @var AuraFrameworkSystem $system Aura system di...
Nosso alô mundo
http://localhost/escola-aura/

Cadastro de Alunos
Criando um layout único
/escola-aura/include/Escola/Package/Web/Home/views/layout.php

<!DOCTYPE html>
<html>
<head>
<meta...
Criando um layout único
/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">In...
Gerando rotas

public function actionIndex()
{
$this->view = 'layout';
$this->data = [
'content' => 'index',
'url' => $thi...
Definindo rotas
/escola-aura/config/default.php

// a route named 'edit'
'edit' => [
'path' => '/escola-aura/edit/{:matric...
Controle de edição

public function actionEdit()
{
$this->view = 'layout';
$this->data = [
'content' => 'edit',
'action' =...
Visão de edição
/escola-aura/include/Escola/Package/Web/Home/views/edit.php

<form action="<?php echo $this->action?>" met...
Nossa tabela

Banco de dados "escola-aura"

CREATE TABLE IF NOT EXISTS `alunos` (
`matricula` int(11) NOT NULL AUTO_INCREM...
Definição de rota de inclusão
/escola-aura/config/default.php

// a route named 'save'
'save' => [
'path' => '/escola-aura...
Ação de inclusão

public function actionSave()
{
$connection = $GLOBALS['di']->get('database');
$connection->connect();
$i...
Conexão com banco de dados
/escola-aura/config/default.php
$di->set('database',function(){
$connection_factory = include r...
Listagem de registros
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionIndex()
{
$connectio...
Listagem de registros
/escola-aura/include/Escola/Package/Web/Home/views/index.php

<a href="<?php echo $this->url?>">Incl...
Listagem de registros
Geração de rota de alteração
/escola-aura/include/Escola/Package/Web/Home/views/index.php
<a href="<?php echo $this->url?>...
Ação de alteração
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionEdit()
{
$aluno = [
'mat...
Ação de gravação
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionSave()
{
$connection = $G...
Definição de rota de exclusão
/escola-aura/config/default.php

// a route named 'delete'
'delete' => [
'path' => '/escola-...
Geração de rota de exclusão
/escola-aura/include/Escola/Package/Web/Home/views/index.php
<a href="<?php echo $this->url?>"...
Ação de exclusão
/escola-aura/include/Escola/Package/Web/Home/HomePage.php
public function actionDelete()
{
$matricula = $...
Você pode ainda...
●

Definir regras para entrada de dados

●

Criar formulários programaticamente

●

Gerenciar a sessão ...
Perguntas?
Obrigado!
Upcoming SlideShare
Loading in …5
×

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

1,364 views

Published on

Nesta palestra aprenderemos a criar uma aplicação utilizando os recursos do PHP 5.4 e os componentes do projeto Aura. A demonstração será feita ao vivo com a criação de snippets de código.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,364
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
6
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

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

  1. 1. Aplicações PHP 5.4 com componentes Aura Flávio Gomes da Silva Lisboa @fgsl
  2. 2. Quem sou eu?
  3. 3. Quem sou eu?
  4. 4. Quem sou eu?
  5. 5. Quem sou eu?
  6. 6. Quem sou eu? 2008 Zend Framework 1 Zend Framework 2
  7. 7. Quem sou eu? http://romocavaleirodoespaco.blogspot.com.br
  8. 8. VAMOS COMEÇAR?
  9. 9. O projeto Aura Código limpo; ●Bibliotecas fracamente acopladas; ●Pacotes independentes; ●Em conformidade com os padrões PHP-FIG. ●
  10. 10. 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?
  11. 11. Código limpo Bjarne Stroustrup, criador do C++
  12. 12. Fraco acoplamento
  13. 13. Padrões “Eu penso em padrões como algo que pode ajudar pessoas a pensarem de modo orientado a objetos” Erich Gamma
  14. 14. O caso de uso ● Um cadastro de alunos. ● Matrícula e nome. ● Inclusão, alteração, exclusão e recuperação. ● Apache + PHP + MySQL
  15. 15. Sugestão: XAMPP http://www.apachefriends.org/pt_br/xampp.html
  16. 16. Ambiente de desenvolvimento http://www.zend.com/en/company/community/pdt/downloads
  17. 17. Ambiente de desenvolvimento
  18. 18. Ambiente de desenvolvimento
  19. 19. Instalando o Composer php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));" No webroot...
  20. 20. Criando um projeto Aura com Composer
  21. 21. Criando um projeto Aura com Composer
  22. 22. Criando um projeto Aura com Composer
  23. 23. Abrindo o projeto
  24. 24. Abrindo o projeto
  25. 25. Estrutura do projeto
  26. 26. Estrutura do projeto
  27. 27. Estrutura do projeto
  28. 28. Estrutura do projeto
  29. 29. Redirecionando escola-aura.htaccess RewriteEngine on RewriteRule .* web/index.php
  30. 30. Criando o controlador
  31. 31. Criando o controlador
  32. 32. Criando o controlador <?php namespace EscolaPackageWebHome; use AuraFrameworkWebControllerAbstractPage; class HomePage extends AbstractPage { public function actionIndex() { $this->view = 'index'; } }
  33. 33. Criando a visão
  34. 34. Criando a visão <h1>Cadastro de Alunos</h1>
  35. 35. Configurando a rota <?php /** * * Overrides for 'default' config mode. * * @var AuraFrameworkSystem $system Aura system directories; when cast to * a string, the Aura system root directory. * * @var AuraAutoloadLoader $loader The autoloader for the system. * * @var AuraDiContainer $di The DI container for the system. * */ // attach the path for a route named 'home' to the controller and action $di->params ['AuraRouterMap'] ['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 ['AuraFrameworkWebControllerFactory'] ['map'] ['home'] = 'EscolaPackageWebHomeHomePage'; ?>
  36. 36. Nosso alô mundo http://localhost/escola-aura/ Cadastro de Alunos
  37. 37. 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>
  38. 38. Criando um layout único /escola-aura/include/Escola/Package/Web/Home/views/index.php <a href="<?php echo $this->url?>">Incluir aluno</a>
  39. 39. Gerando rotas public function actionIndex() { $this->view = 'layout'; $this->data = [ 'content' => 'index', 'url' => $this->router->generate('edit') ]; }
  40. 40. Definindo rotas /escola-aura/config/default.php // a route named 'edit' 'edit' => [ 'path' => '/escola-aura/edit/{:matricula}', 'values' => [ 'controller' => 'home', 'action' => 'edit', 'matricula' => 0 ], 'params' => [ 'matricula' => '(d+)' ] ],
  41. 41. Controle de edição public function actionEdit() { $this->view = 'layout'; $this->data = [ 'content' => 'edit', 'action' => $this->router->generate('save') ]; }
  42. 42. Visão de edição /escola-aura/include/Escola/Package/Web/Home/views/edit.php <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>
  43. 43. Nossa tabela Banco de dados "escola-aura" 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 ;
  44. 44. Definição de rota de inclusão /escola-aura/config/default.php // a route named 'save' 'save' => [ 'path' => '/escola-aura/save', 'values' => [ 'controller' => 'home', 'action' => 'save' ] ],
  45. 45. 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'));
  46. 46. Conexão com banco de dados /escola-aura/config/default.php $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;
  47. 47. Listagem de registros /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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) ];
  48. 48. Listagem de registros /escola-aura/include/Escola/Package/Web/Home/views/index.php <a href="<?php echo $this->url?>">Incluir aluno</a> <table> <thead> <tr> <th>Matrícula</th> <th>Nome</th> </tr> </thead> <?php foreach ($this->list as $item): ?> <tr> <td><?=$item['matricula']?></td> <td><?=$item['nome']?></td> </tr> <?php endforeach; ?> </table>
  49. 49. Listagem de registros
  50. 50. Geração de rota de alteração /escola-aura/include/Escola/Package/Web/Home/views/index.php <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> <?php foreach ($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> <?php endforeach; ?> </table>
  51. 51. Ação de alteração /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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') ]; }
  52. 52. Ação de gravação /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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'));
  53. 53. Definição de rota de exclusão /escola-aura/config/default.php // a route named 'delete' 'delete' => [ 'path' => '/escola-aura/delete/{:matricula}', 'values' => [ 'controller' => 'home', 'action' => 'delete', 'matricula' => 0 ], 'params' => [ 'matricula' => '(d+)' ] ]
  54. 54. Geração de rota de exclusão /escola-aura/include/Escola/Package/Web/Home/views/index.php <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> <?php foreach ($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> <?php endforeach; ?> </table>
  55. 55. Ação de exclusão /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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'));
  56. 56. Você pode ainda... ● Definir regras para entrada de dados ● Criar formulários programaticamente ● Gerenciar a sessão com objetos
  57. 57. Perguntas?
  58. 58. Obrigado!
  59. 59. Aplicações PHP 5.4 com componentes Aura Flávio Gomes da Silva Lisboa @fgsl
  60. 60. Quem sou eu?
  61. 61. Quem sou eu?
  62. 62. Quem sou eu?
  63. 63. Quem sou eu?
  64. 64. Quem sou eu? 2008 Zend Framework 1 Zend Framework 2
  65. 65. Quem sou eu? http://romocavaleirodoespaco.blogspot.com.br
  66. 66. VAMOS COMEÇAR?
  67. 67. O projeto Aura Código limpo; ●Bibliotecas fracamente acopladas; ●Pacotes independentes; ●Em conformidade com os padrões PHP-FIG. ●
  68. 68. 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?
  69. 69. Código limpo Bjarne Stroustrup, criador do C++
  70. 70. Fraco acoplamento
  71. 71. Padrões “Eu penso em padrões como algo que pode ajudar pessoas a pensarem de modo orientado a objetos” Erich Gamma
  72. 72. O caso de uso ● Um cadastro de alunos. ● Matrícula e nome. ● Inclusão, alteração, exclusão e recuperação. ● Apache + PHP + MySQL
  73. 73. Sugestão: XAMPP http://www.apachefriends.org/pt_br/xampp.html
  74. 74. Ambiente de desenvolvimento http://www.zend.com/en/company/community/pdt/downloads
  75. 75. Ambiente de desenvolvimento
  76. 76. Ambiente de desenvolvimento
  77. 77. Instalando o Composer php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));" No webroot...
  78. 78. Criando um projeto Aura com Composer
  79. 79. Criando um projeto Aura com Composer
  80. 80. Criando um projeto Aura com Composer
  81. 81. Abrindo o projeto
  82. 82. Abrindo o projeto
  83. 83. Estrutura do projeto
  84. 84. Estrutura do projeto
  85. 85. Estrutura do projeto
  86. 86. Estrutura do projeto
  87. 87. Redirecionando escola-aura.htaccess RewriteEngine on RewriteRule .* web/index.php
  88. 88. Criando o controlador
  89. 89. Criando o controlador
  90. 90. Criando o controlador <?php namespace EscolaPackageWebHome; use AuraFrameworkWebControllerAbstractPage; class HomePage extends AbstractPage { public function actionIndex() { $this->view = 'index'; } }
  91. 91. Criando a visão
  92. 92. Criando a visão <h1>Cadastro de Alunos</h1>
  93. 93. Configurando a rota <?php /** * * Overrides for 'default' config mode. * * @var AuraFrameworkSystem $system Aura system directories; when cast to * a string, the Aura system root directory. * * @var AuraAutoloadLoader $loader The autoloader for the system. * * @var AuraDiContainer $di The DI container for the system. * */ // attach the path for a route named 'home' to the controller and action $di->params ['AuraRouterMap'] ['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 ['AuraFrameworkWebControllerFactory'] ['map'] ['home'] = 'EscolaPackageWebHomeHomePage'; ?>
  94. 94. Nosso alô mundo http://localhost/escola-aura/ Cadastro de Alunos
  95. 95. 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>
  96. 96. Criando um layout único /escola-aura/include/Escola/Package/Web/Home/views/index.php <a href="<?php echo $this->url?>">Incluir aluno</a>
  97. 97. Gerando rotas public function actionIndex() { $this->view = 'layout'; $this->data = [ 'content' => 'index', 'url' => $this->router->generate('edit') ]; }
  98. 98. Definindo rotas /escola-aura/config/default.php // a route named 'edit' 'edit' => [ 'path' => '/escola-aura/edit/{:matricula}', 'values' => [ 'controller' => 'home', 'action' => 'edit', 'matricula' => 0 ], 'params' => [ 'matricula' => '(d+)' ] ],
  99. 99. Controle de edição public function actionEdit() { $this->view = 'layout'; $this->data = [ 'content' => 'edit', 'action' => $this->router->generate('save') ]; }
  100. 100. Visão de edição /escola-aura/include/Escola/Package/Web/Home/views/edit.php <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>
  101. 101. Nossa tabela Banco de dados "escola-aura" 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 ;
  102. 102. Definição de rota de inclusão /escola-aura/config/default.php // a route named 'save' 'save' => [ 'path' => '/escola-aura/save', 'values' => [ 'controller' => 'home', 'action' => 'save' ] ],
  103. 103. 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'));
  104. 104. Conexão com banco de dados /escola-aura/config/default.php $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;
  105. 105. Listagem de registros /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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) ];
  106. 106. Listagem de registros /escola-aura/include/Escola/Package/Web/Home/views/index.php <a href="<?php echo $this->url?>">Incluir aluno</a> <table> <thead> <tr> <th>Matrícula</th> <th>Nome</th> </tr> </thead> <?php foreach ($this->list as $item): ?> <tr> <td><?=$item['matricula']?></td> <td><?=$item['nome']?></td> </tr> <?php endforeach; ?> </table>
  107. 107. Listagem de registros
  108. 108. Geração de rota de alteração /escola-aura/include/Escola/Package/Web/Home/views/index.php <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> <?php foreach ($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> <?php endforeach; ?> </table>
  109. 109. Ação de alteração /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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') ]; }
  110. 110. Ação de gravação /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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')); }
  111. 111. Definição de rota de exclusão /escola-aura/config/default.php // a route named 'delete' 'delete' => [ 'path' => '/escola-aura/delete/{:matricula}', 'values' => [ 'controller' => 'home', 'action' => 'delete', 'matricula' => 0 ], 'params' => [ 'matricula' => '(d+)' ] ]
  112. 112. Geração de rota de exclusão /escola-aura/include/Escola/Package/Web/Home/views/index.php <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> <?php foreach ($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> <?php endforeach; ?> </table>
  113. 113. Ação de exclusão /escola-aura/include/Escola/Package/Web/Home/HomePage.php 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'));
  114. 114. Você pode ainda... ● Definir regras para entrada de dados ● Criar formulários programaticamente ● Gerenciar a sessão com objetos
  115. 115. Perguntas?
  116. 116. Obrigado!

×