PHP robusto com Zend Framework
Upcoming SlideShare
Loading in...5
×
 

PHP robusto com Zend Framework

on

  • 3,728 views

Palestra sobre Zend Framework apresentada no FLISOL 2012 em Patos/PB no dia 28 de Abril de 2012.

Palestra sobre Zend Framework apresentada no FLISOL 2012 em Patos/PB no dia 28 de Abril de 2012.

Statistics

Views

Total Views
3,728
Views on SlideShare
3,727
Embed Views
1

Actions

Likes
3
Downloads
69
Comments
1

1 Embed 1

http://swazzy.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

PHP robusto com Zend Framework PHP robusto com Zend Framework Presentation Transcript

  • ROBUSTO COM Jaime Netocontato@jaimeneto.comFLISOL 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-PBPHP Robusto com Zend Framework - Jaime Neto
  • Sumário• Sobre o ZF• Quem usa• Componentes• Exemplo: Blog• E o ZF2?• Veja também...• PerguntasPHP 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.comPHP 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 lentaPHP Robusto com Zend Framework - Jaime Neto
  • Quem usa?PHP Robusto com Zend Framework - Jaime Neto
  • ComponentesPHP 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ãoPHP Robusto com Zend Framework - Jaime Neto
  • Exemplo: Blogzf create project blog zf create action login Auth Zend_Tool zf create action logout Authzf configure dbadapter "adapter= zf create action listar Postagens Pdo_Mysql&username=root zf create action exibir Postagens &password=&dbname=blog" zf create action cadastrar Postagenszf enable layout zf create action editar Postagens zf create action excluir Postagenszf create dbtable.from-database zf create action comentar Postagens zf create action excluirComentario Postagenszf create controller Auth zf create action cadastrar Usuarioszf create controller Postagens zf create action editar Usuarioszf create controller Usuarios zf create action excluir Usuarioszf create model Usuario zf create form Loginzf 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çãoPHP Robusto com Zend Framework - Jaime Neto
  • Inicialização; configurações da visão application.iniresources.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 PHP Robusto com Zend Framework - Jaime Neto
  • Inicialização Bootstrapclass 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ócioclass 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_Authclass 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 naclass 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õesclass 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õesclass 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 – NamespacesPHP Robusto com Zend Framework - Jaime Neto
  • Só pra ter uma idéia... Namespacesnamespace ExemploController; no ZF2use ZendMvcControllerActionController, ZendViewModelViewModel;// 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)); }}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-frameworkPHP Robusto com Zend Framework - Jaime Neto
  • Obrigado! Jaime Neto contato@jaimeneto.com @jaimecpn abda.la/flisol/pubilcPHP Robusto com Zend Framework - Jaime Neto