Download - Desfrutando os Componentes do Zend Framework
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/