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ção
Adapters (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_Table
Table 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_Lucene
Apache 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
Email
Zend_Mail Envio e Leitura de
E-mails
Envio:
Zend_Mail_Transport_Smtp
Zend_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_Interface
Maildir, Mbox
Exemplos
Filtragem & Validação
Zend_Filter Transformação de
entradas de dados
Filtros comuns necessários para
aplicações web
Zend_Filter_Interface
filter()
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_Interface
isValid()
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_Config
Simplifica 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_Exception
Classe 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 velha
0 = versões iguais
1 = $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_Session
Ajuda 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_Translate
Tradução de
conteúdo em vários
idiomas
Adapters:
Array, Csv, Gettext, Qt, Tbx, Tmx, Xliff,
XmlTm
addTranslation(), _(), setLocale(),
getLocale(),
Zend_Date
API para manipulação
de datas e tempos
Zend_Date::now()
get(), set(), add(), sub(), compare()
Completamente
internacionalizada (130 idiomas)
Zend_Currency
I18N 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_Application
Facilita 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_Controller
Coraçã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/valor
usuario/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_View
Camada 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_Feed
Provê funcionalidades
para consumir feeds
RSS e Atom
import(), importFile(), importString(),
findFeeds()
Zend_Feed_Rss Zend_Feed_Atom
Zend_Feed_Reader
Zend_XmlRpc
Suporta 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_Rest
Suporta 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_Service
Classe 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_Amf
Provê suporte ao
formato Action
Message Format da
Adobe
Gateway
Zend_Amf_Server
Mapeamento de requisições para
objetos e métodos de classe
Facilidade de configuração
Zend_Cloud
Oferece suporte aos
principais players de
Cloud Computing
Amazon SimpleDB
Windows Azure
Amazon SQS
Zend Queue
Amazon S3
Nirvanix
Zend_Json
Facilita 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_Paginator
Componente flexível
para paginação de
coleções de dados e
apresentação ao
usuário
Adapters:
Array, DbSelect, DbTableSelect,
Iterator, Null
Rotas
Scripts de visão:
Itens da página e controle de
paginação
Zend_Test
Facilita 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_Tool
Provê 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
Obrigado!
contato@fernandomantoan.comcontato@fernandomantoan.com
http://fernandomantoan.comhttp://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/

Desfrutando os Componentes do Zend Framework