SlideShare uma empresa Scribd logo
ROBUSTO COM




    Jaime Neto
contato@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?
• 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...


PHP Robusto com Zend Framework - Jaime Neto
Exemplo: Blog
   • Modelos                 Arquitetura do
        – Postagem              sistema
        – Usuário

   • Controladores                      Banco de
        – Autenticação                   dados
            – Login e Logout
        – Usuarios
            – Listar
            – Cadastrar, editar e excluir *
        – Postagens
            – Cadastrar, editar, excluir *
            – Inserir e excluir comentário

   * Apenas usuários com permissão



PHP Robusto com Zend Framework - Jaime Neto
Exemplo: Blog
zf create project blog                     zf create action login Auth         Zend_Tool
                                           zf create action logout Auth
zf configure dbadapter "adapter=           zf create action listar Postagens
     Pdo_Mysql&username=root               zf create action exibir Postagens
     &password=&dbname=blog"               zf create action cadastrar Postagens
zf enable layout                           zf create action editar Postagens
                                           zf create action excluir Postagens
zf create dbtable.from-database            zf create action comentar Postagens
                                           zf create action excluirComentario Postagens
zf create controller Auth                  zf create action cadastrar Usuarios
zf create controller Postagens             zf create action editar Usuarios
zf create controller Usuarios              zf create action excluir Usuarios

zf create model Usuario                    zf create form Login
zf create model Postagem                   zf create form Usuario
                                           zf create form Postagem
                                           zf create form Comentario

 PHP Robusto com Zend Framework - Jaime Neto
Exemplo: Blog        Estrutura da
                                               aplicação




PHP Robusto com Zend Framework - Jaime Neto
Inicialização
; configurações da visão                                                  application.ini
resources.view.encoding = "UTF-8"
resources.view.doctype = HTML5

; internacionalização
resources.locale.default = “pt_BR"
resources.translate.content = APPLICATION_PATH “/data/locales"
resources.translate.scan = Zend_Translate::LOCALE_DIRECTORY

; caching
resources.cachemanager.database.frontend.name = Core
resources.cachemanager.database.frontend.customFrontendNaming = false
resources.cachemanager.database.frontend.options.lifetime = 7200
resources.cachemanager.database.frontend.options.automatic_serialization = true
resources.cachemanager.database.backend.name = File
resources.cachemanager.database.backend.customBackendNaming = false
resources.cachemanager.database.backend.options.cache_dir = APPLICATION_PATH "/data/cache/dbtable“
resources.cachemanager.database.frontendBackendAutoload = false


 PHP Robusto com Zend Framework - Jaime Neto
Inicialização                                      Bootstrap
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);
    }
}

    PHP Robusto com Zend Framework - Jaime Neto
Regras de negócio
class Application_Model_Postagem {                                                         Classes de
  public function salvar(array $dados) {                                                     modelo
     $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) { /* ... */ }
}


 PHP Robusto com Zend Framework - Jaime Neto
Autorização
                                                                                            Zend_Auth
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);


 PHP Robusto com Zend Framework - Jaime Neto
Autorização
                                                                                Zend_Auth
              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');
    }
}


    PHP Robusto com Zend Framework - Jaime Neto
Formulários                                       Aqui começa a
                                                                                                mão na
class Application_Form_Comentario extends Zend_Form {
   public function init() {
                                                                                               massa...
     $this->setMethod(self::METHOD_POST);
      $this->addElement($this->createElement('hidden',              public function persistData()
      'postagem_id'));                                              {
                                                                        $values = $this->getValues();
      $nome = $this->createElement('text', 'nome');                     if ($values) {
      $nome->setLabel('Nome')->setRequired(true)
                                                                           $modelPostagem = new
           ->addFilter('stripTags')->addFilter('StringTrim')             Application_Model_Postagem();
           ->addValidator('StringLength', false, array(5, 30));
      $this->addElement($nome);
                                                                              return $modelPostagem->
                                                                            inserirComentario($values);
      $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);
  }


 PHP Robusto com Zend Framework - Jaime Neto
Controladores e visões
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;
    }
}

application/views/scripts/postagens/comentar.phtml
<div>Escreva um comentário</div>
<?php echo $this->form ?>



    PHP Robusto com Zend Framework - Jaime Neto
Verificando as permissões
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’);
         }

         /* ... */
     }
}



    PHP Robusto com Zend Framework - Jaime Neto
Que mais posso fazer?
•   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...


PHP Robusto com Zend Framework - Jaime Neto
E o ZF2?
• 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


PHP Robusto com Zend Framework - Jaime Neto
Só pra ter uma idéia...
                                                                     Namespaces
namespace ExemploController;
                                                                       no ZF2
use ZendMvcControllerActionController,
    ZendViewModelViewModel;

// Antes era Exemplo_HelloController extends Zend_Controller_Action_Abstract
class HelloController extends ActionController {
   public function worldAction() {
     $message = $this->getRequest()->query()->get('message', 'foo');
     return new ViewModel(array('message' => $message));
   }
}




PHP Robusto com Zend Framework - Jaime Neto
Veja também...
•   zendframework.com/manual                        Links úteis
•   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
Obrigado!
              Jaime Neto
      contato@jaimeneto.com
            @jaimecpn

                                              abda.la/flisol/pubilc


PHP Robusto com Zend Framework - Jaime Neto

Mais conteúdo relacionado

Mais procurados (20)

PDF
Fugindo das armadilhas do MVC
Ediaimo Borges
 
PDF
Aplicações rápidas para a Web com Django
Freedom DayMS
 
PDF
Java script aula 07 - j-query
Cristiano Pires Martins
 
PDF
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
PDF
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida
 
PDF
jQuery na Prática!
José Alexandre Macedo
 
PDF
Meu projeto final - Neobase 2.0
Saulo Vallory
 
PDF
Evento Front End SP - Arquitetura de Front
Michel Ribeiro
 
PDF
Hooks, o condimento mágico e escondido do WordPress
Zé Fontainhas
 
KEY
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
PDF
Proxy, Man-In-The-Middle e testes
Stanislaw Pusep
 
PDF
Programação Web com jQuery
Victor Adriel Oliveira
 
PDF
Minicurso de jQuery
André Willik Valenti
 
PDF
Java script aula 06 - dom
Cristiano Pires Martins
 
PDF
Domain Driven Design PHP TDC2014
Paulo Victor Gomes
 
PDF
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Flávio Lisboa
 
PPT
Curso de Introdução - PHP
Evandro Klimpel Balmant
 
ODP
Php 08 Oo
Regis Magalhães
 
PDF
Zend Framework 1.11
Cezar Souza
 
PDF
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
Fugindo das armadilhas do MVC
Ediaimo Borges
 
Aplicações rápidas para a Web com Django
Freedom DayMS
 
Java script aula 07 - j-query
Cristiano Pires Martins
 
Object Calisthenics: relaxe e escreva códigos simples
Otávio Calaça Xavier
 
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida
 
jQuery na Prática!
José Alexandre Macedo
 
Meu projeto final - Neobase 2.0
Saulo Vallory
 
Evento Front End SP - Arquitetura de Front
Michel Ribeiro
 
Hooks, o condimento mágico e escondido do WordPress
Zé Fontainhas
 
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
Proxy, Man-In-The-Middle e testes
Stanislaw Pusep
 
Programação Web com jQuery
Victor Adriel Oliveira
 
Minicurso de jQuery
André Willik Valenti
 
Java script aula 06 - dom
Cristiano Pires Martins
 
Domain Driven Design PHP TDC2014
Paulo Victor Gomes
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Flávio Lisboa
 
Curso de Introdução - PHP
Evandro Klimpel Balmant
 
Php 08 Oo
Regis Magalhães
 
Zend Framework 1.11
Cezar Souza
 
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 

Semelhante a PHP robusto com Zend Framework (20)

PPT
PHP FrameWARks - FISL
Marcio Albuquerque
 
PPTX
Conhecendo o Zend Framework
Jaime Neto
 
PDF
Apostila Zend Framework
Fernando Palma
 
PDF
Introdução ao zend framework
Marcos Oliveira
 
ODP
Zend Framework
Adler Medrado
 
PPT
Php FrameWARks - sem CakePHP
Marcio Albuquerque
 
PDF
Zend Framework
Diego Tremper
 
PPT
ZF Básico - 1. Introdução
Marcos Bezerra
 
PDF
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
Cezar Souza
 
PDF
Introdução ao Zend Framework 2
Elton Minetto
 
ODP
Estrutura do Projeto
rafaelbozzetti
 
ODP
Estrutura do Projeto
rafaelbozzetti
 
PDF
Desmistificando o Framework da Zend
Domingos Teruel
 
PDF
Desfrutando os Componentes do Zend Framework
Fernando Geraldo Mantoan
 
PDF
Iniciando com o_zend_framework
Milton Rodrigues
 
PPT
Curso de Introdução - PHP Zend Framework
Evandro Klimpel Balmant
 
PPT
ZF Básico - 2. Instalação
Marcos Bezerra
 
ODP
Da argila ao forte: como desenvolver uma loja com PagSeguro
Michael Castillo Granados
 
PPT
ZF Básico - 5. Modelo
Marcos Bezerra
 
PDF
Analise frameworks php
Igor Moura
 
PHP FrameWARks - FISL
Marcio Albuquerque
 
Conhecendo o Zend Framework
Jaime Neto
 
Apostila Zend Framework
Fernando Palma
 
Introdução ao zend framework
Marcos Oliveira
 
Zend Framework
Adler Medrado
 
Php FrameWARks - sem CakePHP
Marcio Albuquerque
 
Zend Framework
Diego Tremper
 
ZF Básico - 1. Introdução
Marcos Bezerra
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
Cezar Souza
 
Introdução ao Zend Framework 2
Elton Minetto
 
Estrutura do Projeto
rafaelbozzetti
 
Estrutura do Projeto
rafaelbozzetti
 
Desmistificando o Framework da Zend
Domingos Teruel
 
Desfrutando os Componentes do Zend Framework
Fernando Geraldo Mantoan
 
Iniciando com o_zend_framework
Milton Rodrigues
 
Curso de Introdução - PHP Zend Framework
Evandro Klimpel Balmant
 
ZF Básico - 2. Instalação
Marcos Bezerra
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Michael Castillo Granados
 
ZF Básico - 5. Modelo
Marcos Bezerra
 
Analise frameworks php
Igor Moura
 
Anúncio

PHP robusto com Zend Framework

  • 1. ROBUSTO COM Jaime Neto [email protected] FLISOL 2012 – PATOS/PB
  • 2. 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
  • 3. Sumário • Sobre o ZF • Quem usa • Componentes • Exemplo: Blog • E o ZF2? • Veja também... • Perguntas PHP Robusto com Zend Framework - Jaime Neto
  • 4. 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
  • 5. 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
  • 6. Quem usa? PHP Robusto com Zend Framework - Jaime Neto
  • 7. Componentes PHP Robusto com Zend Framework - Jaime Neto
  • 8. Por onde começar? • 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... PHP Robusto com Zend Framework - Jaime Neto
  • 9. Exemplo: Blog • Modelos Arquitetura do – Postagem sistema – Usuário • Controladores Banco de – Autenticação dados – Login e Logout – Usuarios – Listar – Cadastrar, editar e excluir * – Postagens – Cadastrar, editar, excluir * – Inserir e excluir comentário * Apenas usuários com permissão PHP Robusto com Zend Framework - Jaime Neto
  • 10. Exemplo: Blog zf create project blog zf create action login Auth Zend_Tool zf create action logout Auth zf configure dbadapter "adapter= zf create action listar Postagens Pdo_Mysql&username=root zf create action exibir Postagens &password=&dbname=blog" zf create action cadastrar Postagens zf enable layout zf create action editar Postagens zf create action excluir Postagens zf create dbtable.from-database zf create action comentar Postagens zf create action excluirComentario Postagens zf create controller Auth zf create action cadastrar Usuarios zf create controller Postagens zf create action editar Usuarios zf create controller Usuarios zf create action excluir Usuarios zf create model Usuario zf create form Login zf create model Postagem zf create form Usuario zf create form Postagem zf create form Comentario PHP Robusto com Zend Framework - Jaime Neto
  • 11. Exemplo: Blog Estrutura da aplicação PHP Robusto com Zend Framework - Jaime Neto
  • 12. Inicialização ; configurações da visão application.ini resources.view.encoding = "UTF-8" resources.view.doctype = HTML5 ; internacionalização resources.locale.default = “pt_BR" resources.translate.content = APPLICATION_PATH “/data/locales" resources.translate.scan = Zend_Translate::LOCALE_DIRECTORY ; caching resources.cachemanager.database.frontend.name = Core resources.cachemanager.database.frontend.customFrontendNaming = false resources.cachemanager.database.frontend.options.lifetime = 7200 resources.cachemanager.database.frontend.options.automatic_serialization = true resources.cachemanager.database.backend.name = File resources.cachemanager.database.backend.customBackendNaming = false resources.cachemanager.database.backend.options.cache_dir = APPLICATION_PATH "/data/cache/dbtable“ resources.cachemanager.database.frontendBackendAutoload = false PHP Robusto com Zend Framework - Jaime Neto
  • 13. Inicialização Bootstrap 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); } } PHP Robusto com Zend Framework - Jaime Neto
  • 14. Regras de negócio class Application_Model_Postagem { Classes de public function salvar(array $dados) { modelo $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) { /* ... */ } } PHP Robusto com Zend Framework - Jaime Neto
  • 15. Autorização Zend_Auth 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); PHP Robusto com Zend Framework - Jaime Neto
  • 16. Autorização Zend_Auth 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'); } } PHP Robusto com Zend Framework - Jaime Neto
  • 17. Formulários Aqui começa a mão na class Application_Form_Comentario extends Zend_Form { public function init() { massa... $this->setMethod(self::METHOD_POST); $this->addElement($this->createElement('hidden', public function persistData() 'postagem_id')); { $values = $this->getValues(); $nome = $this->createElement('text', 'nome'); if ($values) { $nome->setLabel('Nome')->setRequired(true) $modelPostagem = new ->addFilter('stripTags')->addFilter('StringTrim') Application_Model_Postagem(); ->addValidator('StringLength', false, array(5, 30)); $this->addElement($nome); return $modelPostagem-> inserirComentario($values); $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); } PHP Robusto com Zend Framework - Jaime Neto
  • 18. Controladores e visões 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; } } application/views/scripts/postagens/comentar.phtml <div>Escreva um comentário</div> <?php echo $this->form ?> PHP Robusto com Zend Framework - Jaime Neto
  • 19. Verificando as permissões 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’); } /* ... */ } } PHP Robusto com Zend Framework - Jaime Neto
  • 20. Que mais posso fazer? • 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... PHP Robusto com Zend Framework - Jaime Neto
  • 21. E o ZF2? • 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 PHP Robusto com Zend Framework - Jaime Neto
  • 22. Só pra ter uma idéia... Namespaces namespace ExemploController; no ZF2 use ZendMvcControllerActionController, ZendViewModelViewModel; // Antes era Exemplo_HelloController extends Zend_Controller_Action_Abstract class HelloController extends ActionController { public function worldAction() { $message = $this->getRequest()->query()->get('message', 'foo'); return new ViewModel(array('message' => $message)); } } PHP Robusto com Zend Framework - Jaime Neto
  • 23. Veja também... • zendframework.com/manual Links úteis • 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
  • 24. Obrigado! Jaime Neto [email protected] @jaimecpn abda.la/flisol/pubilc PHP Robusto com Zend Framework - Jaime Neto