php robusto com zend framework
Post on 05-Dec-2014
3.892 Views
Preview:
DESCRIPTION
TRANSCRIPT
ROBUSTO COM
Jaime Netocontato@jaimeneto.com
FLISOL 2012 – PATOS/PB
Sobre mim
• Tecnólogo em Telemática (CEFET-PB)• Especialista em Desenvolvimento para Web (UNIBRATEC) • Analista e desenvolvedor do • Analista e desenvolvedor da Ponto-R Comunicação• Analista e desenvolvedor da UFPB Virtual• Trabalho com PHP desde 2004• Trabalho com Zend Framework desde 2007• Parte da equipe dos grupos PHP-PB e ZF-PB
PHP Robusto com Zend Framework - Jaime Neto
Sumário
• Sobre o ZF• Quem usa• Componentes• Exemplo: Blog• E o ZF2?• Veja também...• Perguntas
PHP Robusto com Zend Framework - Jaime Neto
Sobre o ZF
• Desenvolvido pela Zend Technologies• Versão 1.0 lançada em Junho de 2007 • Código aberto (New BSD License)• Requer PHP 5.1.4+ (recomenda-se 5.2.4+)• Requer PHPUnit 3.3.0 para testes unitários• Versão estável: 1.11.11• Versão em teste: 2 beta3• http://zendframework.com
PHP Robusto com Zend Framework - Jaime Neto
Sobre o ZF
• Totalmente orientado a objetos• Utiliza bastante design patterns• Fracamente acoplado (“Preferir plugar a herdar”)• Não impõe regras de desenvolvimento ou estrutura• Pode ser usado como uma biblioteca de classes• Enorme variedade de componentes• Utiliza reescrita de url por padrão• Comunidade enorme• Curva de aprendizado lenta
PHP Robusto com Zend Framework - Jaime Neto
Quem usa?
PHP Robusto com Zend Framework - Jaime Neto
Componentes
PHP Robusto com Zend Framework - Jaime Neto
Por onde começar?
PHP Robusto com Zend Framework - Jaime Neto
• Defina a arquitetura do seu sistema• Defina bem seu banco de dados• Use o Zend_Tool
– RAD e Tooling– Rapidez para montar a estrutura do projeto– Nada de manipular a árvore de diretórios– Via linha de comando
• Adicione as configurações necessárias• Defina as regras de negócio• E mão na massa...
Exemplo: Blog
PHP Robusto com Zend Framework - Jaime Neto
• Modelos– Postagem– Usuário
• Controladores– Autenticação
– Login e Logout– Usuarios
– Listar– Cadastrar, editar e excluir *
– Postagens– Cadastrar, editar, excluir *– Inserir e excluir comentário
* Apenas usuários com permissão
Arquitetura do sistema
Banco de dados
Exemplo: Blog
PHP Robusto com Zend Framework - Jaime Neto
zf create project blog
zf configure dbadapter "adapter= Pdo_Mysql&username=root &password=&dbname=blog"
zf enable layout
zf create dbtable.from-database
zf create controller Authzf create controller Postagenszf create controller Usuarios
zf create model Usuariozf create model Postagem
zf create action login Authzf create action logout Authzf create action listar Postagenszf create action exibir Postagenszf create action cadastrar Postagenszf create action editar Postagenszf create action excluir Postagenszf create action comentar Postagenszf create action excluirComentario Postagenszf create action cadastrar Usuarioszf create action editar Usuarioszf create action excluir Usuarios
zf create form Loginzf create form Usuariozf create form Postagemzf create form Comentario
Zend_Tool
Exemplo: Blog
PHP Robusto com Zend Framework - Jaime Neto
Estrutura da aplicação
Inicialização
PHP Robusto com Zend Framework - Jaime Neto
; configurações da visãoresources.view.encoding = "UTF-8"resources.view.doctype = HTML5
; internacionalizaçãoresources.locale.default = “pt_BR"resources.translate.content = APPLICATION_PATH “/data/locales"resources.translate.scan = Zend_Translate::LOCALE_DIRECTORY ; cachingresources.cachemanager.database.frontend.name = Coreresources.cachemanager.database.frontend.customFrontendNaming = falseresources.cachemanager.database.frontend.options.lifetime = 7200resources.cachemanager.database.frontend.options.automatic_serialization = trueresources.cachemanager.database.backend.name = Fileresources.cachemanager.database.backend.customBackendNaming = falseresources.cachemanager.database.backend.options.cache_dir = APPLICATION_PATH "/data/cache/dbtable“resources.cachemanager.database.frontendBackendAutoload = false
application.ini
Inicialização
PHP Robusto com Zend Framework - Jaime Neto
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /** Inicializa as configurações de autorização **/ protected function _initAcl() { $acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role(‘visitante')) ->addRole(new Zend_Acl_Role('membro‘, ‘visitante’) ->addRole(new Zend_Acl_Role('administrador‘));
$acl->add(new Zend_Acl_Resource(‘postagens')); $acl->add(new Zend_Acl_Resource(‘usuarios')); $acl->allow(‘membro’, ‘postagens’, array(‘inserir’, ‘editar’, ‘excluir-comentario’)); $acl->allow(‘membro’, ‘usuarios’); // todos os privilégios de usuários $acl->deny(‘membro’, ‘usuarios’, array(‘excluir’));
$acl->allow(‘administrador’); // admin pode tudo
Zend_Registry::set(‘Zend_Acl’, $acl); }}
Bootstrap
Regras de negócio
PHP Robusto com Zend Framework - Jaime Neto
class Application_Model_Postagem { public function salvar(array $dados) { $tbPostagem = new Application_Model_DbTable_Postagem(); if (isset($dados['id'])) { $id = $dados['id']; if ($tbPostagem->update($dados, array('id = ?' => $id))) return $id; } else { $dados['criacao'] = Zend_Date::now()->get('yyyy-MM-dd HH:mm:ss'); return $tbPostagem->insert($dados); } } public function consultaTodas($where = null, $order = null, $count = null, $offset = null) { /* ... */ } public function consulta($id) { /* ... */ } public function excluir($id) { /* ... */ } public function getComentario($id) { /* ... */ } public function inserirComentario($dados) { /* ... */ } public function excluirComentario($id) { /* ... */ }}
Classes de modelo
Autorização
PHP Robusto com Zend Framework - Jaime Neto
class AuthController extends Zend_Controller_Action { public function loginAction() { // se já estiver logado redireciona para a página inicial if (Zend_Auth::getInstance()->hasIdentity()) $this->_helper->redirector('index', 'index');
$loginForm = new Application_Form_Login(); if ($this->getRequest()->isPost()) { if ($loginForm->isValid($this->getRequest()->getPost())) { $dbAdapter = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); $authAdapter->setTableName('usuario') ->setIdentityColumn('email‘)->setCredentialColumn('senha‘) ->setCredentialTreatment('MD5(?)');
$authAdapter->setIdentity($loginForm->getValue('email')) ->setCredential($loginForm->getValue('senha'));
$auth = Zend_Auth::getInstance()->authenticate($authAdapter);
Zend_Auth
Autorização
PHP Robusto com Zend Framework - Jaime Neto
if ($result->isValid()) { $userInfo = $authAdapter->getResultRowObject(null, 'senha'); $auth->getStorage()->write($userInfo);
$this->_helper->redirector('index', 'index'); } else { // Usuário ou senha incorretos } } } $this->view->form = $loginForm; }
public function logoutAction() { Zend_Auth::getInstance()->clearIdentity(); $this->_helper->redirector('index', 'index'); }}
Zend_Auth
Formulários
PHP Robusto com Zend Framework - Jaime Neto
class Application_Form_Comentario extends Zend_Form { public function init() { $this->setMethod(self::METHOD_POST);
$this->addElement($this->createElement('hidden', 'postagem_id'));
$nome = $this->createElement('text', 'nome'); $nome->setLabel('Nome')->setRequired(true) ->addFilter('stripTags')->addFilter('StringTrim') ->addValidator('StringLength', false, array(5, 30)); $this->addElement($nome);
$descricao = $this->createElement('textarea', 'descricao'); $descricao->setLabel('Comentários')->setRequired(true); $this->addElement($descricao);
$submit = $this->createElement('submit', 'submit'); $submit->setLabel('Salvar Comentário')->setIgnore(true); $this->addElement($submit); }
public function persistData() { $values = $this->getValues(); if ($values) { $modelPostagem = new
Application_Model_Postagem();
return $modelPostagem-> inserirComentario($values);
} }}
Aqui começa a mão na massa...
Controladores e visões
PHP Robusto com Zend Framework - Jaime Neto
class PostagensController extends Zend_Controller_Action { /* Outros métodos do controlador */ public function comentarAction() { $form = new Application_Form_Comentario(); $form->setAction('postagens/comentar’);
if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) if ($form->persistData()) $this->_redirect('postagens/exibir/id/' . $form->getValue('postagem_id') . '#comentarios');
$postagem_id = $this->_getParam('postagem_id'); $form->populate(array('postagem_id' => $postagem_id)); $this->view->form = $form; }}
<div>Escreva um comentário</div><?php echo $this->form ?>
application/views/scripts/postagens/comentar.phtml
Verificando as permissões
PHP Robusto com Zend Framework - Jaime Neto
class PostagensController extends Zend_Controller_Action {
/* Outros métodos do controlador */
public function inserirAction() { $auth = Zend_Auth::getInstance()->getIdentity(); $acl = Zend_Registry::get(‘Zend_Acl’);
if (!$acl->isAllowed($auth->perfil, ‘postagens’, ‘inserir’)) { $this->_helper->redirector(‘error’, ‘error’); }
/* ... */ }}
Que mais posso fazer?
PHP Robusto com Zend Framework - Jaime Neto
• Criar página de RSS (Zend_Feed)• Criar uma página de contato (Zend_Form, Zend_Mail)• Criar widgets para a barra lateral (Zend_View_Helper)• Melhorar performance do site (Zend_Cache)• Criar rotas alternativas para as páginas (routers)
– Exemplo: /titulo-do-post em vez de /postagens/exibir/id/1
• Criar um módulo para versão mobile• Guardar os logs de acesso (Zend_Log)• Criar menu e breadcrumbs (Zend_Navigation)• Criar paginação para as postagens (Zend_Paginator)• Criar testes unitários para a aplicação (Zend_Test)• Inserir busca por conteúdo (Zend_Search_Lucene)• Muito mais...
E o ZF2?
PHP Robusto com Zend Framework - Jaime Neto
• Previsão para versão final– “Verão de 2012”
• O que vai mudar?– Baseado no PHP versão 5.3– Performance melhorada– Uma camada MVC dirigida por eventos totalmente reescrita– Novo sistema de gerenciamento de módulos– Uma nova camada de visão, para responder de forma adequada
de acordo com o tipo de requisição (HTML, JSON, etc)– Suporte a injeção de dependência– EventManager, para sistemas controlados por eventos– Namespaces
Só pra ter uma idéia...
PHP Robusto com Zend Framework - Jaime Neto
namespace Exemplo\Controller;
use Zend\Mvc\Controller\ActionController, Zend\View\Model\ViewModel;
// Antes era Exemplo_HelloController extends Zend_Controller_Action_Abstractclass HelloController extends ActionController { public function worldAction() { $message = $this->getRequest()->query()->get('message', 'foo'); return new ViewModel(array('message' => $message)); }}
Namespacesno ZF2
Veja também...
PHP Robusto com Zend Framework - Jaime Neto
Links úteis• zendframework.com/manual• zend-framework-examples.blogspot.com.br• forum.imasters.com.br/topic/220186-zend-framework• blog.giovannicandido.com/category/php/zend-framework• akrabat.com
• php-pb.net/sua-escolha• github.com/php-pb/Sua-escolha
• blog.jaimeneto.com/category/zend-framework
PHP Robusto com Zend Framework - Jaime Neto
Jaime Netocontato@jaimeneto.com
@jaimecpn
Obrigado!
abda.la/flisol/pubilc
top related