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.
9. O projeto Aura
Código limpo;
●Bibliotecas fracamente acopladas;
●Pacotes independentes;
●Em conformidade com os padrões
PHP-FIG.
●
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?
32. Criando o controlador
<?php
namespace EscolaPackageWebHome;
use AuraFrameworkWebControllerAbstractPage;
class HomePage extends AbstractPage {
public function actionIndex()
{
$this->view = 'index';
}
}
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';
?>
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. 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. 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. 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;
67. O projeto Aura
Código limpo;
●Bibliotecas fracamente acopladas;
●Pacotes independentes;
●Em conformidade com os padrões
PHP-FIG.
●
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?
90. Criando o controlador
<?php
namespace EscolaPackageWebHome;
use AuraFrameworkWebControllerAbstractPage;
class HomePage extends AbstractPage {
public function actionIndex()
{
$this->view = 'index';
}
}
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';
?>
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. 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. 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. 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;