Introdução
Evandro Klimpel Balmant
@EvandroBalmant
Framework ?
“Framework é um conjunto de classesque colaboram para realizar uma responsabilidadepara um domínio de um subsistema da aplicação.”
FAYAD e SCHMIDT
“Em desenvolvimento de software,um framework ou arcabouço é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica.”
Wikipédia
DRY
Don‘t repeat yourself“Não se repita”
“É um princípio de desenvolvimento de software com vista a reduzir a repetição de informações de todos os tipos.”
Wikipédia
Zend Framework ?
JirayaFramework
Zend ?
Arquitetura MVC
Componentes Zend
Configuração Básica
Nome do ProjetoDiretório da AplicaçãoArquivos de ConfiguraçãoControladorasControladora PrincipalModelsViewsTemplatesTemplates da Controladora IndexTemplate do Método indexAction()Definição de permissão de acessoArquivos de DocumentaçãoBibliotecasClasses do Zend FrameworkDefinição de permissão de acessoArquivos PúblicosFolhas de estiloImagensJavaScripsDefinição de permissão de acessoDefinição de permissão de acessoBootstrap
Bootstrap (index.php)
• Arquivo principal da aplicação;
• Define todos os caminhos onde os arquivos estão armazenados, e todos os componentes que a aplicação utilizar;
• Responsável por inicializar a aplicação, ele invoca os arquivos de controlador que são responsáveis pelo funcionamento da aplicação.
index.php (Bootstrap)
<?php /** Identifica o sistema operacional do servidor, considerando que podem ser Windows ou Linux */ $operationalSystem = stripos($_SERVER['SERVER_SOFTWARE'],'win32') !== FALSE ? 'WINDOWS' : 'LINUX'; $pathSeparator = $operationalSystem == 'WINDOWS' ? ';' : ':'; /** Configura o caminho a ser procurado em todos os includes */ $path = $pathSeparator . 'library'; $path .= $pathSeparator . 'application' . DIRECTORY_SEPARATOR . 'models'; $path .= $pathSeparator . 'application' . DIRECTORY_SEPARATOR . 'controllers'; set_include_path(get_include_path() . $path); /** Zend_Loader_Autoloader carrega arquivos, classes e recursos*/ require_once('Zend/Loader/Autoloader.php'); /** Inicializa o autoloader */ $autoloader = Zend_Loader_Autoloader::getInstance(); /** Configurar para que outras classes sem namespace sejam incluidas */ $autoloader->setFallbackAutoloader(true);
index.php (Bootstrap)
/** Parte das Visões */ /** Cria um novo objeto do tipo view */ $view = new Zend_View(); $view->setEncoding('UTF-8'); $view->setEscape('htmlentities');/** Definindo diretório onde estarão as views */ $view->setBasePath('./application/views/'); /** Registra na memória o objeto $view */ Zend_Registry::set('view', $view); /** Configura o controlador do projeto, que por acaso, é o index.php */ $baseUrl = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], '/index.php')); /** Cria uma nova instância da classe controladora */ $frontController = Zend_Controller_Front::getInstance(); /** Configura o endereço do controlador do projeto */ $frontController->setBaseUrl($baseUrl); /** Indica o diretório onde estão os outros controladores da aplicação */ $frontController->setControllerDirectory('./application/controllers'); /** O controlador deve tratar as excessões */ $frontController->throwExceptions(true);
index.php (Bootstrap)
/** Carrega configurações da base de dados. * do arquivo config.ini na sessão database */$config = new Zend_Config_Ini('./application/configs/config.ini', 'database');/** Registra na memória a variável config */Zend_Registry::set('config', $config);
/** Configura a conexão com a base de dados, pegando as variáveis do arquivo de configuração */$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());Zend_Db_Table_Abstract::setDefaultAdapter($db);/** Registra a variável db */Zend_Registry::set('db',$db);
/** Configura o formato para data */ date_default_timezone_set("America/Sao_Paulo"); /** Executa o controlador do projeto * Ele Irá receber todas as requisições */ $frontController->dispatch();?>
IndexController
<?phpclass IndexController extends Zend_Controller_Action{
public function indexAction(){
$this->view->assign('data', date('d/m/Y'));}
}?>
index.phtml
<html><head>
<title>Hello World</title></head><body>
<p>Olá, hoje é dia <?=$this->data?>.</p></body>
</html>
.htaccess (URL’s Amigáveis / Permissões)
RewriteEngine onRewriteRule .* index.phpphp_flag magic_quotes_gpc offphp_flag register_globals off
Arquivo: .htaccess
deny from all
Arquivo: application/.htaccess
RewriteEngine off
Arquivo: library/.htaccessArquivo: public/.htaccess
URL’s
http://localhost/ Classe: IndexControllerMétodo: indexAction()
http://localhost/produtos Classe: ProdutosControllerMétodo: indexAction()
http://localhost/produtos/cadastro Classe: ProdutosControllerMétodo: cadastroAction()
http://localhost/loja-virtual Classe: LojaVirtualControllerMétodo: indexAction()
config.ini
[database]db.adapter = PDO_MYSQLdb.config.host = localhostdb.config.username = rootdb.config.password = rootdb.config.dbname = nome_banco
Arquivo: application/configs/config.ini
DAO (Zend_Db_Table)
<?phpclass Produto extends Zend_Db_Table{
protected $_name = “tb_produto”;}
?>
Arquivo: application/models/Produto.php
Insert
<?php$dao = new Produto();
$dados = array(‘titulo’ => ‘Blablablabla’,‘descricao’ => ‘Nononononono’
);$dao->insert($dados);
?>
Select
<?php$dao = new Produto();
$sql = $dao->select()->from($dao, array(‘titulo’,’descricao’))->order(‘titulo’);
$dados = $dao->fetchAll($sql)->toArray();?>
Update
<?php$dao = new Produto();
$dados = array(‘titulo’ => ‘Blablablabla’,‘descricao’ => ‘Nononononono’
); $where = $dao->getAdapter()->quoteInto(‘id = ?’, 10);
$dao->update($dados, $where);?>
Delete
<?php$dao = new Produto(); $sql = $dao->getAdapter()->quoteInto(‘id = ?’,
10);$dao->delete($sql);
?>
Dúvidas ?
Evandro Klimpel Balmant
@EvandroBalmant
http://www.blogalizado.com.br