Upload
fernando-geraldo-mantoan
View
20.866
Download
45
Embed Size (px)
DESCRIPTION
Palestra apresentada na Latinoware 2010, sobre os principais componentes do Zend Framework.
Citation preview
Desfrutando os Componentes do
Zend Framework
Fernando Geraldo Mantoan
Fernando Geraldo Mantoan
●Bacharel em Ciência da Computação – CESUFOZ
●Zend Certified Engineer PHP5
●Zend Certified Engineer Zend Framework
●Analista de Sistemas – ApolloTI
●Membro e fundador do grupo PHPFoz
●(Tentando ser) Contribuidor do Zend Framework
Zend Framework
Filosofia do PHP (Simplicidade)
Boas práticas de Orientação a Objetos
Testes Unitários
Documentação Completa
Biblioteca de Classes
Autenticação & Autorização
Zend_Auth
AutenticaçãoAdapters (LDAP, HTTP, BD)
Zend_Auth_Result
Persistência de identidade (session)
Singleton
Zend_Acl
Autorização Lista de Controle de Acesso (ACL)
Objetos protegidos Papéis
Zend_Acl_Resource Zend_Acl_Role
Assertions
Exemplos
Banco de Dados
Zend_Db
Interface SQL
Zend_Db_Adapter
Db2, Mysqli, Oracle, Pdo (Mysql, Pgsql etc.)
Factory
fetchall,insert, quote (normal, identifier, into)
Zend_Db_Statement
Zend_Db_Adapter::query($sql, $bind)
Zend_Db_Statement::execute($bind)
PDOStatement
Statement preparado e executado
Zend_Db_Statement::fetch()
Zend_Db_Select
SQL Select Pedaços da consulta por métodos OO
Auto quoting Fluent Interface
Zend_Db_Adapter::select()
from(), where(), order(), join(), group(), limit()
Zend_Db_TableTable Data Gateway
Row Data Gateway
Nível de Tabela:Zend_Db_Table_Abstract
Nível de linha:Zend_Db_Table_Row
insert(), update(), delete(), find(), fetchAll(), fetchRow(), info()
save(), delete()
Exemplos
Busca
Zend_Search_LuceneApache Lucene
Buscas com ranking
Buscas com caracteres coringas, caracteres de proximidade, intervalo, etc.
Documentos:Zend_Search_Lucene_Document
Campos:Zend_Search_Lucene_Field
Vários tipos de campos
Índice, armazenado em arquivo binário
Otimização de Índices
Charset padrão: UTF-8
Exemplos
Diagnóstico & Manutenção
Zend_Log Logging de aplicações
Writer
Filter
Formatter
Prioridades:EMERG, ALERT, CRIT, ERR, WARN, NOTICE, INFO, DEBUG, Custom
Stream, Db, Mock
Bloqueia a escrita de uma mensagem
Simple, Xml
Zend_Debug
Zend_Debug::dump($var, $label=null, $echo=true)
var_dump()
Informações sobre uma variável
Imprime ou retorna
Exemplos
Zend_Mail Envio e Leitura de E-mails
Envio:Zend_Mail_Transport_SmtpZend_Mail_Transport_Sendmail
Fluent Interface
setBodyText(), setBodyHtml() setFrom(), addTo(), addCc(), addBcc(), setSubject(), send()
Anexos:createAttachment()
Leitura de E-mails
Mbox, Maildir, Pop3, IMAP
Zend_Mail_Message
Zend_Mail_Storage_Folder_InterfaceMaildir, Mbox
Exemplos
Filtragem & Validação
Zend_Filter Transformação de entradas de dados
Filtros comuns necessários para aplicações web
Zend_Filter_Interfacefilter()
Alnum, Alpha, BaseName, Digits, Dir, HtmlEntities, Int, RealPath, StringToLower, StringToUpper, StringTrim, StripTags
Filter Chain
Zend_Validate Validação de dados
Mensagens de erro sobre falhas de validação
Zend_Validate_InterfaceisValid() getMessages()
Alnum, Alpha, Barcode, Between, Ccnum, Date, Digits, EmailAddress, Float, GreaterThan, Hex, Hostname, InArray, Int, Ip, LessThan, NotEmpty, Regex, StringLength
Chain
Exemplos
Formulários
Zend_Form
Filtragem e validação de dados
Ordenação de elementos, renderização com escaping
Agrupamento de elementos (DisplayGroups)
Formulários multi-páginas(SubForms)
Zend_Form_Element
Button, Hidden, Image, Radio, Reset, Submit, Password, Text, Textarea, Checkbox, Select
Zend_Filter Zend_Validate
Decorators
Configuram a renderização dos elementos
Podem adicionar conteúdo antes ou depois dos elementos
Exemplo: HTML tag <dd> antes de um <input />
Exemplos
Infraestrutura
Zend_ConfigSimplifica o acesso e a utilização de dados de configuração
Formatos: Ini, Json, Xml, Yaml
Hierarquia de chaves(ex: database.username)
Hierarquia de seção[production][development : production]
Zend_ExceptionClasse base para todas as exceções do ZF
Utilizada para um bloco catch mais generalizado
Implementa o suporte a exceções anteriores (PHP 5.3)
Zend_Registry Container de objetos no escopo da aplicação
Zend_Registry::set($chave, $objeto)
Zend_Registry::get($chave)
Zend_Registry::isRegistered($chave)
Zend_Version Contém a versão atual do framework
Zend_Version::VERSION
Zend_Version::compareVersion($version)
-1 = $version é mais velha0 = versões iguais1 = $version é mais nova
Zend_Loader Auxilia a carregar arquivos dinamicamente
Zend_Loader::loadFile($filename)
Zend_Loader::loadClass($class)
Substitui '_' por '/' e adiciona '.php' ao final
Zend_SessionAjuda a gerenciar e preservar dados de sessão
Sessões com namespace:Zend_Session_Namespace
Zend_Session::start()
Dados persistidos são atributos da classe
Exemplos
Internacionalização
Zend_Locale Linguagem e região do usuário
Formatação, normalização, conversões
BROWSER, ENVIRONMENT, FRAMEWORK
getLanguage(), getRegion()
Zend_TranslateTradução de conteúdo em vários idiomas
Adapters:Array, Csv, Gettext, Qt, Tbx, Tmx, Xliff, XmlTm
addTranslation(), _(), setLocale(), getLocale(),
Zend_DateAPI para manipulação de datas e tempos
Zend_Date::now()
get(), set(), add(), sub(), compare()
Completamente internacionalizada (130 idiomas)
Zend_CurrencyI18N para moedas, representação de dinheiro, formatação, cálculo etc.
Suporte a mais de 100 moedas
Cálculo de moedas
Posição da moeda, formato, valor
add(), div(), sub(), mul(), mod(), compare() etc
Exemplos
MVC
Zend_ApplicationFacilita o processo de bootstrapping da aplicação
Recursos Reutilizáveis
Checagem de dependências
Classes comuns de boostrap
Definição do ambiente de execução
Inicia o Autoload por padrão
Zend_ControllerCoração do sistema MVC do ZF
Front Controller Action Helpers e Plugins
URLs amigáveis (em conjunto com o router, dispatcher etc.)controller/action/param/valorusuario/editar/id/1
Zend_Controller
Classe base: Zend_Controller_Action
Métodos possuem como sufixo “Action”indexAction()
Rota padrão de erros, exceptions não tratadas etc.:ErrorController -> errorAction()
Zend_ViewCamada de apresentação de dados (HTML)
Script por controller/action, exemplo:scripts/usuario/listar.phtml
View Helpers
HTML + PHP (default)
Escaping
Filtros de saída
Smarty ou Twig podem ser utilizados
Zend_Layout Two step view design pattern
Script de visão global
Delimitadores definem onde exibir conteúdo, menus, etc.
Habilitar/Desabilitar layouts
Escopo de variáveis separado
Não é fortemente acoplado ao MVC
Exemplos
Performance
Zend_Cache Maneira genérica de se fazer caching de dados.
Frontends:Output, File, Function, Class, Page
Backends:Sqlite, Memcached, Apc, ZendPlatform
Factory
Zend_Memory Gestão de memória em um ambiente com memória limitada
Regula a memória com caching e swapping de dados
Usa backends do Zend_Cache
Exemplos
Webservices
Zend_FeedProvê funcionalidades para consumir feeds RSS e Atom
import(), importFile(), importString(), findFeeds()
Zend_Feed_Rss Zend_Feed_Atom
Zend_Feed_Reader
Zend_XmlRpcSuporta o consumo e criação de serviços XML-RPC
Introspecção de servidor
Conversão automática entre o PHP e o XML-RPC
Servidor expõe dados de métodos através da documentação PHPDoc e suporta classes e funções
Zend_RestSuporta o consumo e criação de serviços Rest
Métodos Remotos = Métodos Nativos
get(), post(), put(), delete()
Servidor com recursos completos
GET e POST e limitação a XML
Zend_ServiceClasse base para implementações de web services
Implementação de serviços populares:Akismet, Amazon, Audioscrobbler, Del.icio.us, Ebay, Flickr, LiveDocx, Nirvanix, ReCaptcha, ShortUrl, Simpy, SlideShare, StrikeIron, Technorati, Twitter, Windows Azure, Yahoo!
Miscelânea
Zend_AmfProvê suporte ao formato Action Message Format da Adobe
GatewayZend_Amf_Server
Mapeamento de requisições para objetos e métodos de classe
Facilidade de configuração
Zend_CloudOferece suporte aos principais players de Cloud Computing
Amazon SimpleDB
Windows Azure
Amazon SQS
Zend Queue
Amazon S3
Nirvanix
Zend_JsonFacilita a serialização entre PHP e JSON e a decodificação de JSON para PHP
Converte objetos PHP para objetos JSON, com opção de identação dos atributos
XML para JSON
Zend_PaginatorComponente flexível para paginação de coleções de dados e apresentação ao usuário
Adapters:Array, DbSelect, DbTableSelect, Iterator, Null
RotasScripts de visão:Itens da página e controle de paginação
Zend_TestFacilita os testes unitários de aplicações escritas com o ZF
Testes de todo MVC
Suporte aos TestCases do PHPUnit
Bootstrapping da aplicação
Zend_ToolProvê recursos RAD para agilizar a criação de aplicações ZF
Uso via Command Line Interface (CLI)
Pacote separado em uma pasta “bin”
Instalação via PEAR
Criação de controllers, actions, views, formulários, layouts etc.
Mais Componentes●Zend_Barcode●Zend_Captcha●Zend_CodeGenerator●Zend_Config_Writer●Zend_Console_Getopt●Zend_Dojo●Zend_Dom●Zend_File●Zend_Gdata●Zend_Http●Zend_InfoCard●Zend_Ldap●Zend_Markup●Zend_Measure●Zend_Mime●Zend_Navigation●Zend_Oauth
●Zend_OpenId●Zend_Pdf●Zend_ProgressBar●Zend_Queue●Zend_Reflection●Zend_Serializer●Zend_Server●Zend_Soap●Zend_Tag●Zend_Text●Zend_TimeSync●Zend_Tool_Framework●Zend_Tool_Project●Zend_Uri●Zend_Wildfire●ZendX_Console_Process_Unix●ZendX_Jquery
Coding Standards
Arquivo só com PHP fica sem “?>”
Identação com 4 espaços, nunca tabs
80 caracteres por linha
Linhas terminam com \n (0x0A)
Sem short tags (<? ?>, <?= ?>)
Constantes, alfanumérico e underscore, maiúsculo, somente em classes e com const. Exemplo:const UPPER_CASE = 0;
Nome de Classes mapeados para o diretório
DAO_User_156 = DAO/User/156.php
Várias palavras: PessoaFisica
Arquivos: alfanumérico, underscore, hífen
Interfaces terminam com “_Interface”
Classes abstratas com “_Abstract”
Estrutura condicional: if ($x == 0) { $x++; } else if ($x < 5) { } else { }
Atributos e variáveis: alfanumérico, underscore, hífen
Atributos e variáveis: camelCased
private ou protected: prefixadas com “_”
acessores prefixados com get ou set
[email protected] [email protected] http://fernandomantoan.com http://fernandomantoan.com @fernandomantoan@fernandomantoan
Referências:
●Zend Framework Reference Guide●Zend Framework Certification Study Guide●Rob Allen – Zend Framework Certification, A Refresher●SILVA, Flávio Gomes Lisboa da. Zend Framework Componentes Poderosos para PHP.
● http://www.fantom-xp.com/wallpapers/30/Strawberry_Summer.jpg● http://www.flickr.com/photos/claudio_ar/2225929813/sizes/l/in/photostream/● http://www.flickr.com/photos/calevans/1716641542/● http://www.flickr.com/photos/jhherren/104065111/● http://www.flickr.com/photos/laughingsquid/2218075860/sizes/o/in/photostream/● http://www.flickr.com/photos/raphaelstolt/440815933/sizes/m/in/photostream/● http://www.flickr.com/photos/plinton/248878222/sizes/o/in/photostream/● http://www.flickr.com/photos/hindrik/1919291052/sizes/l/in/photostream/● http://www.flickr.com/photos/lisetterivera/4622424365/sizes/l/in/photostream/● http://www.flickr.com/photos/adrianclarkmbbs/3063516728/sizes/l/in/photostream/● http://www.flickr.com/photos/stephoto/1519649375/sizes/l/in/photostream/● http://www.flickr.com/photos/go_freyer/3610363038/sizes/l/in/photostream/● http://www.flickr.com/photos/mrszooropa/2803209531/sizes/l/in/photostream/● http://www.flickr.com/photos/agrinberg/565231028/sizes/o/in/photostream/● http://www.flickr.com/photos/anjan58/1281306048/sizes/o/in/photostream/● http://www.flickr.com/photos/shearwater/154210466/sizes/l/in/photostream/● http://www.flickr.com/photos/beatkueng/2696608640/sizes/l/in/photostream/● http://www.textually.org/textually/archives/images/set3/phone-string-plastic-cup.jpg● http://www.flickr.com/photos/oakleyoriginals/3311066815/sizes/l/in/photostream/● http://www.flickr.com/photos/78501498@N00/3081043374/sizes/o/in/photostream/● http://www.flickr.com/photos/e2/2244075454/● http://www.flickr.com/photos/doberagi/1404539812/● http://www.flickr.com/photos/7533960@N02/1522924687/ ● http://www.flickr.com/photos/calevans/1732671937/● http://www.flickr.com/photos/lhirlimann/3069695539/