Slide 1

Slide 1 text

Desfrutando os Componentes do Zend Framework Fernando Geraldo Mantoan

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Zend Framework

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Filosofia do PHP (Simplicidade) Boas práticas de Orientação a Objetos Testes Unitários Documentação Completa Biblioteca de Classes

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Autenticação & Autorização

Slide 8

Slide 8 text

Zend_Auth Autenticação Adapters (LDAP, HTTP, BD) Zend_Auth_Result Persistência de identidade (session) Singleton

Slide 9

Slide 9 text

Zend_Acl Autorização Lista de Controle de Acesso (ACL) Objetos protegidos Papéis Zend_Acl_Resource Zend_Acl_Role Assertions

Slide 10

Slide 10 text

Exemplos

Slide 11

Slide 11 text

Banco de Dados

Slide 12

Slide 12 text

Zend_Db Interface SQL Zend_Db_Adapter Db2, Mysqli, Oracle, Pdo (Mysql, Pgsql etc.) Factory fetchall,insert, quote (normal, identifier, into)

Slide 13

Slide 13 text

Zend_Db_Statement Zend_Db_Adapter::query($sql, $bind) Zend_Db_Statement::execute($bind) PDOStatement Statement preparado e executado Zend_Db_Statement::fetch()

Slide 14

Slide 14 text

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()

Slide 15

Slide 15 text

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()

Slide 16

Slide 16 text

Exemplos

Slide 17

Slide 17 text

Busca

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Vários tipos de campos Índice, armazenado em arquivo binário Otimização de Índices Charset padrão: UTF-8

Slide 20

Slide 20 text

Exemplos

Slide 21

Slide 21 text

Diagnóstico & Manutenção

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Zend_Debug Zend_Debug::dump($var, $label=null, $echo=true) var_dump() Informações sobre uma variável Imprime ou retorna

Slide 24

Slide 24 text

Exemplos

Slide 25

Slide 25 text

Email

Slide 26

Slide 26 text

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()

Slide 27

Slide 27 text

Leitura de E-mails Mbox, Maildir, Pop3, IMAP Zend_Mail_Message Zend_Mail_Storage_Folder_Interface Maildir, Mbox

Slide 28

Slide 28 text

Exemplos

Slide 29

Slide 29 text

Filtragem & Validação

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Exemplos

Slide 33

Slide 33 text

Formulários

Slide 34

Slide 34 text

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)

Slide 35

Slide 35 text

Zend_Form_Element Button, Hidden, Image, Radio, Reset, Submit, Password, Text, Textarea, Checkbox, Select Zend_Filter Zend_Validate

Slide 36

Slide 36 text

Decorators Configuram a renderização dos elementos Podem adicionar conteúdo antes ou depois dos elementos Exemplo: HTML tag
antes de um

Slide 37

Slide 37 text

Exemplos

Slide 38

Slide 38 text

Infraestrutura

Slide 39

Slide 39 text

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]

Slide 40

Slide 40 text

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)

Slide 41

Slide 41 text

Zend_Registry Container de objetos no escopo da aplicação Zend_Registry::set($chave, $objeto) Zend_Registry::get($chave) Zend_Registry::isRegistered($chave)

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Zend_Loader Auxilia a carregar arquivos dinamicamente Zend_Loader::loadFile($filename) Zend_Loader::loadClass($class) Substitui '_' por '/' e adiciona '.php' ao final

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

Exemplos

Slide 46

Slide 46 text

Internacionalização

Slide 47

Slide 47 text

Zend_Locale Linguagem e região do usuário Formatação, normalização, conversões BROWSER, ENVIRONMENT, FRAMEWORK getLanguage(), getRegion()

Slide 48

Slide 48 text

Zend_Translate Tradução de conteúdo em vários idiomas Adapters: Array, Csv, Gettext, Qt, Tbx, Tmx, Xliff, XmlTm addTranslation(), _(), setLocale(), getLocale(),

Slide 49

Slide 49 text

Zend_Date API para manipulação de datas e tempos Zend_Date::now() get(), set(), add(), sub(), compare() Completamente internacionalizada (130 idiomas)

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

Exemplos

Slide 52

Slide 52 text

MVC

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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()

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Exemplos

Slide 59

Slide 59 text

Performance

Slide 60

Slide 60 text

Zend_Cache Maneira genérica de se fazer caching de dados. Frontends: Output, File, Function, Class, Page Backends: Sqlite, Memcached, Apc, ZendPlatform Factory

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Exemplos

Slide 63

Slide 63 text

Webservices

Slide 64

Slide 64 text

Zend_Feed Provê funcionalidades para consumir feeds RSS e Atom import(), importFile(), importString(), findFeeds() Zend_Feed_Rss Zend_Feed_Atom Zend_Feed_Reader

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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!

Slide 68

Slide 68 text

Miscelânea

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

Zend_Cloud Oferece suporte aos principais players de Cloud Computing Amazon SimpleDB Windows Azure Amazon SQS Zend Queue Amazon S3 Nirvanix

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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.

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

Coding Standards

Slide 77

Slide 77 text

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;

Slide 78

Slide 78 text

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”

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

No content

Slide 81

Slide 81 text

Obrigado! [email protected] [email protected] http://fernandomantoan.com http://fernandomantoan.com @fernandomantoan @fernandomantoan

Slide 82

Slide 82 text

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.

Slide 83

Slide 83 text

● 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/