SlideShare uma empresa Scribd logo
 
PHP FrameWARks Palestrantes: Leonardo Thomas Marcelo Curi Márcio Albuquerque Sandro Franco 26/06/2009
O que é um framework?
Framework Conjunto de classes Funcionalidade específica Dita o fluxo de controle da aplicação
Framework
 
 
O Framework! Framework  COMPLETO  para desenvolvimento de aplicações Última versão estável: 1.8.4 PHP 5.x
Instalação e Configuração Baixar o pacote Cria-se uma estrutura de diretórios (zf.sh) Configurar o  bootstrap Configurar o  application.ini Configurar o .conf (opcional)
ESTE é o Framework! Framework para desenvolvimento  RÁPIDO  em PHP Última versão estável: 1.2.3.8166 PHP 4.x e 5.x
Instalação e Configuração Download do arquivo no site do CakePHP Descompactar o arquivo Estrutura de diretório pré-estruturada “ Convenção sobre configuração” Simples configuração do webserver
Vocês ainda não viram O Framework! Framework  RÁPIDO  para desenvolvimento  RÁPIDO  em PHP, mas MUITO  RÁPIDO  MESMO! Última versão estável: 1.7.1 PHP 4.x e 5.x
Instalação e Configuração Baixa um arquivo compactado de 893kb Descompacta na pasta www do seu servidor web Simples e  RÁPIDA  configuração do webserver
Framework de verdade é esse daqui! Foco em aplicações robustas em contexto empresarial Última versão estável: 1.2.8 PHP 5.2.x
Instalação e Configuração Três opções de instalação: Sandbox: para usuários que desejam testar o symfony pear: $php pear install symfony/symfony Download do pacote (recomendada) Criar o projeto e aplicação Configurar o webserver
DRY e X treme P rogramming Arquitetura
Arquitetura
Arquitetura
Arquitetura
Arquitetura
Conceito de Framework Conjunto de classes Funcionalidade específica Dita o fluxo de controle da aplicação
Acesso a Dados e ORM ORM próprio Implementa Active Record (Dados -> Class -> Objeto) Exemplo: Tabela Usuarios: id, nome, sobrenome, login, senha
Acesso a Dados e ORM
Acesso a Dados e ORM Disponibiliza o padrão Active Record modificado Leitura fácil É bonito de se ver...
Acesso a Dados e ORM // SELECT nome FROM usuarios u // JOIN telefones t ON t.usuario_id = u.id $this->db->select('nome'); $this->db->from('usuarios u'); $this->db->join('telefones t', 't.usuario_id = u.id'); $query = $this->db->get(); // SELECT nome FROM usuarios WHERE id = $id LIMIT 10, 20 $this->db->select('nome')-> from('usuarios')->   where('id', $id)-> limit(10, 20); $query = $this->db->get() ;
Acesso a Dados e ORM Também trabalha com Active Record PDO para acesso a dados
Acesso a Dados e ORM class Usuarios extends Zend_Db_Table { protected $_name = "usuarios"; } // Controller public function indexAction()  { $usuarios = new Usuarios(); $this->view->usuarios = $usuarios->fetchAll(); }
Acesso a Dados e ORM Camada de abstração:  1.0.x e 1.1.x => Creole 1.2.x => PDO ORM:  Propel Doctrine Comandos: symfony propel:build-model
Acesso a Dados e ORM class UsuarioPeer extends BaseUsuarioPeer { public static function retrieveByLoginSenha($login, $senha) { $c = new Criteria(); $c->add(self::LOGIN, $login); $c->add(self::SENHA, $senha); return self::doSelectOne($c); } } class Usuario extends BaseUsuario { public function getNomeCompleto() { return $this->nome . “ “ . $this->sobrenome; } }
Formulários e Validações sfForm sfFormPropel sfFormDoctrine sfValidator (sfValidatorDate, sfValidatorDateRange, sfValidatorEmail, sfValidatorNumber, sfValidatorInteger, sfValidatorString, sfCallbackValidator) Comando symfony propel:build-forms
Formulários e Validações class BaseUsuarioForm extends BaseFormPropel { public function setup() { $this->setWidgets(array( 'nome' => new sfWidgetFormInput(), )); $this->setValidators(array( 'nome' => new sfValidatorString( array('max_length' => 100, 'required' => true)), )); } public function getModelName() { return 'Usuario'; } }
Formulários e Validações $form = new UsuarioForm(); $valores = $request->getParameter($form->getName()); $arquivos = $request->getFiles($form->getName()); $form->bind($valores, $arquivos); if ($form->isValid()) { $usuario = $form->save(); // OU // $usuario = $form->getObject(); // $usuario->save(); }
Formulários e Validações
Formulários e Validações Formulários – Helpers que agilizam o desenvolvimento (Form, Ajax, Html...) View .ctp (Cake Template Pages) Validações – Fácil implementação nas classes Model da aplicação Core validation rules Date, e-mail, ip, cc, ...
Formulários e Validações
Formulários e Validações Zend_Form Validation Zend_Form_Element_* XSS e SQL Injection Zend_Validation
Formulários e Validações class UsuarioForm extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName("Usuario"); $id = new Zend_Form_Element_Hidden("id"); $nome = new Zend_Form_Element_Text("nome"); $nome->setLabel("Nome") ->setRequired(true); $submit = new Zend_Form_Element_Submit("enviar"); $this->addElements(array($id, $nome$submit)); } }
Formulários e Validações Também possui helpers para tags html Forms, input text, input hidden, ... Validadores no controller Validation rules no form: required, min_length, max_length, valid_email Você também pode fazer o seu: métodos callback Vejam como é fácil...
Formulários e Validações $rules['username'] = "required"; $rules['password'] = "required"; $rules['passconf'] = "required"; $rules['email'] = "required"; $this->validation->set_rules($rules); $fields['username'] = 'Username'; $fields['password'] = 'Password'; $fields['passconf'] = 'Password Confirmation'; $fields['email'] = 'Email Address'; $this->validation->set_fields($fields); if ($this->validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); }
Cache Tem o recurso nativo de cache, que armazena os dados em /system/cache Ative o recurso de cache com a linha de comando no controller: $this->output->cache( n ); //n é o tempo de cache em minutos Permite database caching Recurso embutido na classe Database
Cache File -> Armazenamento simples de arquivo. Possui vários parâmetros opcionais, mas funciona bem com os padrões; APC -> Alternative PHP Cache, framework de cahe livre, aberto e robusto que visa a otimização do código.
Cache Xcache -> Semelhante ao APC, deve ser compilado no PHP para sua melhor performance. Necessita de usuário e senha para funcionar corretamente. MemCache -> Sistema de cache de memória distribuída de alto desempenho, acesso rápido a resultados de consultas e armazenamento de dados armazenados em cache.
Cache Configuração simples: Configure::write('Cache.check', true), no core.php; Utilizar um dos padrões de configuração disponíveis
Cache Zend_Cache: Backend Arquivo Banco de Dados Memcache (memória) APC Xcache ...
Cache Zend_Cache: Frontend Saída de Dados ( Output ) Função Classe Página ...
Cache // Construção do objeto cache $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions); // Exemplo de cache de Saída if (!($cache->start('meu_cache'))) { echo ”Isso está em cache (“.time().”)“; $cache->end(); } echo “Isso NÃO está no cache”.time().”)”;
Cache Symfony oferece um sistema de cache flexível, configurado através de arquivos YAML Várias formar de armazenar o cache: sfAPCCache, sfEAcceleratorCache, sfMemcacheCache, sfSQLiteCache, and sfXCacheCache Permitir cache de uma ação, de uma página ou apenas partes de página Aceita parâmetros
Cache #<appName>/config/settings.yml dev:  .settings:  cache:  on #<appName>/modules/<moduleName>/config/cache.yml list: enabled:  on with_layout: false  # Default value lifetime:  86400  # Default value // Removendo o cache $cacheManager = $this->getContext()->getViewCacheManager(); $cacheManager->remove('usario/listar'); $cacheManager->remove('usario/mostrar?id='.$user_id)
Segurança Autenticação Com o AuthComponent é possível retirar ou conceder permissões facilmente ao usuário.
Segurança Autorização Com o SecurityComponent é possível implementar algumas características muito poderosas da segurança.
Segurança Configuração em arquivo YAML #<appName>/config/security.yml all: is_secure: on credentials: [[ admin, gerente ], usuario] sfUser setAuthenticated() isAuthenticated() addCredential() hasCredential()
Segurança Zend_Acl Papéis ( Roles ) Recursos ( Resources ) Zend_Auth Banco de Dados HTTP LDAP Digest OpenID
Segurança $acl = new Zend_Acl(); $acl->addRole(new Zend_Acl_Role(“usuario_comum”))      ->addRole(new Zend_Acl_Role(“administrador”)); $acl->add(new Zend_Acl_Resource(“area_administrativa”)); $acl->allow(“administrador”, “area_administrativa”); $acl->deny(“usuario_comum”, “area_administrativa”); $acl->isAllowed(“usuario_comum”, “area_administrativa”);
Segurança $auth = new Zend_Auth; $adapter = new Zend_Db_Adapter_Pdo_Sqlite( array('dbname' => ':memory:') ); $resposta = $auth->authenticate($adapter); if ($resposta->isValid()) { ... }
Segurança Por decisão de projeto não embute recursos de autorização e autenticação. Desabilita o array $_GET no controller $product_id = $this->uri->segment(3, 0); Práticas para tornar a aplicação segura Filtros xss, limpeza de dados antes da inclusão em banco, validação de dados
Localização e Internacionalização Zend_Locale Zend_Date Zend_Currency Zend_Measure_*
Localização e Internacionalização Zend_Translate Array CSV INI Gettext ...
Localização e Internacionalização // l10n - Moedas $locale = new Zend_Locale(“pt_BR”); $moeda = new Zend_Currency(); $moeda->toCurrency(1000.00); // Saída =>  R$1.000,00 // i18n $ingles = array(“Você conhece PHP?” => “Do you know PHP?”, “ Sim”  => “Yes”, “ Não”  => “No”); $tradutor = new Zend_Translate(“array”, $ingles, “en”); $locale = new Zend_Locale(“en_US”); echo $tradutor->_(“Você conhece PHP?”); $resposta = $tradutor->_(“Sim”);
Localização e Internacionalização User Culture: combinação do país e idioma do usuário Alterando o User Culture do usuário $this->getUser()->setCulture('pt_BR'); Helpers => informações no formato correto (de acordo com o User Culture): format_date, format_datetime, format_currency, format_number, etc Helper I18N
Localização e Internacionalização // Texto a ser traduzido echo __('Bem vindo ao nosso site') # XML de tradução <appName>/i18n/messages.en.xml <?xml version=&quot;1.0&quot; ?> <xliff version=&quot;1.0&quot;> <file original=&quot;global&quot; source-language=&quot;pt_BR&quot; datatype=&quot;plaintext&quot;> <body> <trans-unit id=&quot;1&quot;> <source>Bem vindo ao nosso site</source> <target>Welcome to our website</target> </trans-unit> </body> </file> </xliff>
Localização e Internacionalização Baixar ou fazer arquivo de tradução; <APLICAÇÃO>/app/locale/pt_br Configurar aqui:
Localização e Internacionalização Mudança da linguagem a qualquer momento antes da mensagem, bootstrap, beforeFilter ou em request específico; Tratar o erro:
Localização e Internacionalização Facilita a construção de menus internacionalizados Utiliza arquivos de linguagem para armazenar as traduções Classe Language Language helper
Documentação e Comunidade Documentação COMPLETA Quick Start API Guia de Referência Comunidade ativa (as outras são passivas) Contribuições => FRAMEWORK!!
Documentação e Comunidade Documentação muito boa; http://book.cakephp.org/ Comunidades ativas; Google Groups http://groups.google.com/group/cake-php?pli=1 http://bakery.cakephp.org/ IRC #cakephp on irc.freenode.net
Documentação e Comunidade Alguns Blogs The Bakery Mark Story Ad7six Teknoid Mariano CakeDC Team Felix and Tim GrumpyCanuck Snook.ca
Documentação e Comunidade Tutoriais Blog Wiki Livros
Documentação e Comunidade A documentação é bem resolvida. (Vem junto com o download do framework) Wiki Fórum Livros
E mais... Múltiplas aplicações Informações de Benchmark Template parser Assistente de flexão gramatical Scaffolding
E mais... Testes unitários e funcionais Vários ambientes Configurações distintas Web debug toolbar Carga de dados ( fixtures )
E mais... Uso de partes do framework Componentização MUITO COMPLETO Zend
E mais... NADA !!!!!!
Quem aqui usa... Cake PHP? Code Igniter? Symfony? Zend Framework?
Conclusão
Conclusão Similaridades PHP 5.x OO MVC ORM Formulários e Validações Cache Internacionalização e Localização Extensíveis
Conclusão AUMENTO DE PRODUTIVIDADE
Conclusão Escolha o framework que melhor  atende às necessidades do seu projeto!!!
CONTATOS Leonardo Thomas [email_address] Marcelo Curi [email_address] Márcio Albuquerque [email_address] Sandro Franco [email_address]

Mais conteúdo relacionado

Mais procurados

um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidades
William Costa
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
elliando dias
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
flaviognm
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
Douglas V. Pasqua
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
Fabrízio Mello
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
Eduardo Mendes
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1
Arley Rodrigues
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
Eduardo Mendes
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
Denis L Presciliano
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
Regis Magalhães
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
Jaime Neto
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
Daniel Maia
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
Igor Alves
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
metzen
 
NotORM
NotORMNotORM
NotORM
Tiago Davi
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Flávio Lisboa
 
Dicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App AndroidDicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App Android
Ubiratan Soares
 
Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7
Sérgio Lima
 

Mais procurados (20)

um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidades
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Apache Struts
Apache StrutsApache Struts
Apache Struts
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
NotORM
NotORMNotORM
NotORM
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Dicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App AndroidDicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App Android
 
Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7
 

Destaque

PHP FrameWARks - CakePHP
PHP FrameWARks - CakePHPPHP FrameWARks - CakePHP
PHP FrameWARks - CakePHP
Marcio Albuquerque
 
E tem isso no PHP? Novidades do PHP 5.3 e 5.4
E tem isso no PHP? Novidades do PHP 5.3 e 5.4 E tem isso no PHP? Novidades do PHP 5.3 e 5.4
E tem isso no PHP? Novidades do PHP 5.3 e 5.4
Marcio Albuquerque
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
Marcio Albuquerque
 
PHP FrameWARks - Zend Framework
PHP FrameWARks - Zend FrameworkPHP FrameWARks - Zend Framework
PHP FrameWARks - Zend Framework
Marcio Albuquerque
 
Php corporativo
Php corporativoPhp corporativo
Php corporativo
Marcio Albuquerque
 
PHP FrameWARks - Code Igniter
PHP FrameWARks - Code IgniterPHP FrameWARks - Code Igniter
PHP FrameWARks - Code Igniter
Marcio Albuquerque
 
PHP FrameWARks - Symfony
PHP FrameWARks - SymfonyPHP FrameWARks - Symfony
PHP FrameWARks - Symfony
Marcio Albuquerque
 
Php for Android
Php for AndroidPhp for Android
Php for Android
Marcio Albuquerque
 
Iniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo CodeigniterIniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo Codeigniter
Renan Martins Pimentel
 
Grails
GrailsGrails
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de ConteúdoPyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
Rangel Javier
 
Grails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeGrails: O Java em Alta Produtividade
Grails: O Java em Alta Produtividade
Cleórbete Santos
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 
Desenvolvendo websites com Drupal - IV ENSOL
Desenvolvendo websites com Drupal - IV ENSOLDesenvolvendo websites com Drupal - IV ENSOL
Desenvolvendo websites com Drupal - IV ENSOL
Gedvan Dias
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
Michael Douglas
 
Introdução ao Drupal 7
Introdução ao Drupal 7Introdução ao Drupal 7
Introdução ao Drupal 7
Gedvan Dias
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Dafiti Tech Conference - PHP Levado a Sério
Dafiti Tech Conference - PHP Levado a SérioDafiti Tech Conference - PHP Levado a Sério
Dafiti Tech Conference - PHP Levado a Sério
Evaldo Junior
 
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YIIDETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
Eder Nogueira
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
Evaldo Junior
 

Destaque (20)

PHP FrameWARks - CakePHP
PHP FrameWARks - CakePHPPHP FrameWARks - CakePHP
PHP FrameWARks - CakePHP
 
E tem isso no PHP? Novidades do PHP 5.3 e 5.4
E tem isso no PHP? Novidades do PHP 5.3 e 5.4 E tem isso no PHP? Novidades do PHP 5.3 e 5.4
E tem isso no PHP? Novidades do PHP 5.3 e 5.4
 
Php FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHPPhp FrameWARks - sem CakePHP
Php FrameWARks - sem CakePHP
 
PHP FrameWARks - Zend Framework
PHP FrameWARks - Zend FrameworkPHP FrameWARks - Zend Framework
PHP FrameWARks - Zend Framework
 
Php corporativo
Php corporativoPhp corporativo
Php corporativo
 
PHP FrameWARks - Code Igniter
PHP FrameWARks - Code IgniterPHP FrameWARks - Code Igniter
PHP FrameWARks - Code Igniter
 
PHP FrameWARks - Symfony
PHP FrameWARks - SymfonyPHP FrameWARks - Symfony
PHP FrameWARks - Symfony
 
Php for Android
Php for AndroidPhp for Android
Php for Android
 
Iniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo CodeigniterIniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo Codeigniter
 
Grails
GrailsGrails
Grails
 
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de ConteúdoPyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
PyroCMS - Conhecendo o CMS - Sistema Gerenciador de Conteúdo
 
Grails: O Java em Alta Produtividade
Grails: O Java em Alta ProdutividadeGrails: O Java em Alta Produtividade
Grails: O Java em Alta Produtividade
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
 
Desenvolvendo websites com Drupal - IV ENSOL
Desenvolvendo websites com Drupal - IV ENSOLDesenvolvendo websites com Drupal - IV ENSOL
Desenvolvendo websites com Drupal - IV ENSOL
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
Introdução ao Drupal 7
Introdução ao Drupal 7Introdução ao Drupal 7
Introdução ao Drupal 7
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Dafiti Tech Conference - PHP Levado a Sério
Dafiti Tech Conference - PHP Levado a SérioDafiti Tech Conference - PHP Levado a Sério
Dafiti Tech Conference - PHP Levado a Sério
 
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YIIDETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
DETRAN MAIS FÁCIL: CONSTRUÇÃO DE APP WEB USANDO O FRAMEWORK ÁGIL YII
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 

Semelhante a PHP FrameWARks - FISL

Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
Regis Magalhães
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
grupoweblovers
 
Tutorial.yii
Tutorial.yiiTutorial.yii
Tutorial.yii
Renato Mendes
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
Eduardo Bregaida
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Adler Medrado
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
Milfont Consulting
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
Harlley Oliveira
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
Elton Minetto
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
Claudio Miranda
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
Michel Ribeiro
 
Criando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bindCriando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bind
Murilo Siqueira Ferreira
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
jefesrodrigues
 
Novidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por aiNovidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por ai
Marcos Petry
 
Angular js
Angular jsAngular js
Angular js
Bruno Catão
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
Mario Jorge Pereira
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
Fábio Nogueira de Lucena
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
Michael Castillo Granados
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
Everaldo Wanderlei Uavniczak
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
Alexandre S. Oliveira
 

Semelhante a PHP FrameWARks - FISL (20)

Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Tutorial.yii
Tutorial.yiiTutorial.yii
Tutorial.yii
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Criando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bindCriando componentes interativos em páginas AMP com amp-bind
Criando componentes interativos em páginas AMP com amp-bind
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Novidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por aiNovidades do Django 1.2 e o que vem por ai
Novidades do Django 1.2 e o que vem por ai
 
Angular js
Angular jsAngular js
Angular js
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 

PHP FrameWARks - FISL

  • 1.  
  • 2. PHP FrameWARks Palestrantes: Leonardo Thomas Marcelo Curi Márcio Albuquerque Sandro Franco 26/06/2009
  • 3. O que é um framework?
  • 4. Framework Conjunto de classes Funcionalidade específica Dita o fluxo de controle da aplicação
  • 6.  
  • 7.  
  • 8. O Framework! Framework COMPLETO para desenvolvimento de aplicações Última versão estável: 1.8.4 PHP 5.x
  • 9. Instalação e Configuração Baixar o pacote Cria-se uma estrutura de diretórios (zf.sh) Configurar o bootstrap Configurar o application.ini Configurar o .conf (opcional)
  • 10. ESTE é o Framework! Framework para desenvolvimento RÁPIDO em PHP Última versão estável: 1.2.3.8166 PHP 4.x e 5.x
  • 11. Instalação e Configuração Download do arquivo no site do CakePHP Descompactar o arquivo Estrutura de diretório pré-estruturada “ Convenção sobre configuração” Simples configuração do webserver
  • 12. Vocês ainda não viram O Framework! Framework RÁPIDO para desenvolvimento RÁPIDO em PHP, mas MUITO RÁPIDO MESMO! Última versão estável: 1.7.1 PHP 4.x e 5.x
  • 13. Instalação e Configuração Baixa um arquivo compactado de 893kb Descompacta na pasta www do seu servidor web Simples e RÁPIDA configuração do webserver
  • 14. Framework de verdade é esse daqui! Foco em aplicações robustas em contexto empresarial Última versão estável: 1.2.8 PHP 5.2.x
  • 15. Instalação e Configuração Três opções de instalação: Sandbox: para usuários que desejam testar o symfony pear: $php pear install symfony/symfony Download do pacote (recomendada) Criar o projeto e aplicação Configurar o webserver
  • 16. DRY e X treme P rogramming Arquitetura
  • 21. Conceito de Framework Conjunto de classes Funcionalidade específica Dita o fluxo de controle da aplicação
  • 22. Acesso a Dados e ORM ORM próprio Implementa Active Record (Dados -> Class -> Objeto) Exemplo: Tabela Usuarios: id, nome, sobrenome, login, senha
  • 23. Acesso a Dados e ORM
  • 24. Acesso a Dados e ORM Disponibiliza o padrão Active Record modificado Leitura fácil É bonito de se ver...
  • 25. Acesso a Dados e ORM // SELECT nome FROM usuarios u // JOIN telefones t ON t.usuario_id = u.id $this->db->select('nome'); $this->db->from('usuarios u'); $this->db->join('telefones t', 't.usuario_id = u.id'); $query = $this->db->get(); // SELECT nome FROM usuarios WHERE id = $id LIMIT 10, 20 $this->db->select('nome')-> from('usuarios')-> where('id', $id)-> limit(10, 20); $query = $this->db->get() ;
  • 26. Acesso a Dados e ORM Também trabalha com Active Record PDO para acesso a dados
  • 27. Acesso a Dados e ORM class Usuarios extends Zend_Db_Table { protected $_name = &quot;usuarios&quot;; } // Controller public function indexAction() { $usuarios = new Usuarios(); $this->view->usuarios = $usuarios->fetchAll(); }
  • 28. Acesso a Dados e ORM Camada de abstração: 1.0.x e 1.1.x => Creole 1.2.x => PDO ORM: Propel Doctrine Comandos: symfony propel:build-model
  • 29. Acesso a Dados e ORM class UsuarioPeer extends BaseUsuarioPeer { public static function retrieveByLoginSenha($login, $senha) { $c = new Criteria(); $c->add(self::LOGIN, $login); $c->add(self::SENHA, $senha); return self::doSelectOne($c); } } class Usuario extends BaseUsuario { public function getNomeCompleto() { return $this->nome . “ “ . $this->sobrenome; } }
  • 30. Formulários e Validações sfForm sfFormPropel sfFormDoctrine sfValidator (sfValidatorDate, sfValidatorDateRange, sfValidatorEmail, sfValidatorNumber, sfValidatorInteger, sfValidatorString, sfCallbackValidator) Comando symfony propel:build-forms
  • 31. Formulários e Validações class BaseUsuarioForm extends BaseFormPropel { public function setup() { $this->setWidgets(array( 'nome' => new sfWidgetFormInput(), )); $this->setValidators(array( 'nome' => new sfValidatorString( array('max_length' => 100, 'required' => true)), )); } public function getModelName() { return 'Usuario'; } }
  • 32. Formulários e Validações $form = new UsuarioForm(); $valores = $request->getParameter($form->getName()); $arquivos = $request->getFiles($form->getName()); $form->bind($valores, $arquivos); if ($form->isValid()) { $usuario = $form->save(); // OU // $usuario = $form->getObject(); // $usuario->save(); }
  • 34. Formulários e Validações Formulários – Helpers que agilizam o desenvolvimento (Form, Ajax, Html...) View .ctp (Cake Template Pages) Validações – Fácil implementação nas classes Model da aplicação Core validation rules Date, e-mail, ip, cc, ...
  • 36. Formulários e Validações Zend_Form Validation Zend_Form_Element_* XSS e SQL Injection Zend_Validation
  • 37. Formulários e Validações class UsuarioForm extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName(&quot;Usuario&quot;); $id = new Zend_Form_Element_Hidden(&quot;id&quot;); $nome = new Zend_Form_Element_Text(&quot;nome&quot;); $nome->setLabel(&quot;Nome&quot;) ->setRequired(true); $submit = new Zend_Form_Element_Submit(&quot;enviar&quot;); $this->addElements(array($id, $nome$submit)); } }
  • 38. Formulários e Validações Também possui helpers para tags html Forms, input text, input hidden, ... Validadores no controller Validation rules no form: required, min_length, max_length, valid_email Você também pode fazer o seu: métodos callback Vejam como é fácil...
  • 39. Formulários e Validações $rules['username'] = &quot;required&quot;; $rules['password'] = &quot;required&quot;; $rules['passconf'] = &quot;required&quot;; $rules['email'] = &quot;required&quot;; $this->validation->set_rules($rules); $fields['username'] = 'Username'; $fields['password'] = 'Password'; $fields['passconf'] = 'Password Confirmation'; $fields['email'] = 'Email Address'; $this->validation->set_fields($fields); if ($this->validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); }
  • 40. Cache Tem o recurso nativo de cache, que armazena os dados em /system/cache Ative o recurso de cache com a linha de comando no controller: $this->output->cache( n ); //n é o tempo de cache em minutos Permite database caching Recurso embutido na classe Database
  • 41. Cache File -> Armazenamento simples de arquivo. Possui vários parâmetros opcionais, mas funciona bem com os padrões; APC -> Alternative PHP Cache, framework de cahe livre, aberto e robusto que visa a otimização do código.
  • 42. Cache Xcache -> Semelhante ao APC, deve ser compilado no PHP para sua melhor performance. Necessita de usuário e senha para funcionar corretamente. MemCache -> Sistema de cache de memória distribuída de alto desempenho, acesso rápido a resultados de consultas e armazenamento de dados armazenados em cache.
  • 43. Cache Configuração simples: Configure::write('Cache.check', true), no core.php; Utilizar um dos padrões de configuração disponíveis
  • 44. Cache Zend_Cache: Backend Arquivo Banco de Dados Memcache (memória) APC Xcache ...
  • 45. Cache Zend_Cache: Frontend Saída de Dados ( Output ) Função Classe Página ...
  • 46. Cache // Construção do objeto cache $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions); // Exemplo de cache de Saída if (!($cache->start('meu_cache'))) { echo ”Isso está em cache (“.time().”)“; $cache->end(); } echo “Isso NÃO está no cache”.time().”)”;
  • 47. Cache Symfony oferece um sistema de cache flexível, configurado através de arquivos YAML Várias formar de armazenar o cache: sfAPCCache, sfEAcceleratorCache, sfMemcacheCache, sfSQLiteCache, and sfXCacheCache Permitir cache de uma ação, de uma página ou apenas partes de página Aceita parâmetros
  • 48. Cache #<appName>/config/settings.yml dev: .settings: cache: on #<appName>/modules/<moduleName>/config/cache.yml list: enabled: on with_layout: false # Default value lifetime: 86400 # Default value // Removendo o cache $cacheManager = $this->getContext()->getViewCacheManager(); $cacheManager->remove('usario/listar'); $cacheManager->remove('usario/mostrar?id='.$user_id)
  • 49. Segurança Autenticação Com o AuthComponent é possível retirar ou conceder permissões facilmente ao usuário.
  • 50. Segurança Autorização Com o SecurityComponent é possível implementar algumas características muito poderosas da segurança.
  • 51. Segurança Configuração em arquivo YAML #<appName>/config/security.yml all: is_secure: on credentials: [[ admin, gerente ], usuario] sfUser setAuthenticated() isAuthenticated() addCredential() hasCredential()
  • 52. Segurança Zend_Acl Papéis ( Roles ) Recursos ( Resources ) Zend_Auth Banco de Dados HTTP LDAP Digest OpenID
  • 53. Segurança $acl = new Zend_Acl(); $acl->addRole(new Zend_Acl_Role(“usuario_comum”))      ->addRole(new Zend_Acl_Role(“administrador”)); $acl->add(new Zend_Acl_Resource(“area_administrativa”)); $acl->allow(“administrador”, “area_administrativa”); $acl->deny(“usuario_comum”, “area_administrativa”); $acl->isAllowed(“usuario_comum”, “area_administrativa”);
  • 54. Segurança $auth = new Zend_Auth; $adapter = new Zend_Db_Adapter_Pdo_Sqlite( array('dbname' => ':memory:') ); $resposta = $auth->authenticate($adapter); if ($resposta->isValid()) { ... }
  • 55. Segurança Por decisão de projeto não embute recursos de autorização e autenticação. Desabilita o array $_GET no controller $product_id = $this->uri->segment(3, 0); Práticas para tornar a aplicação segura Filtros xss, limpeza de dados antes da inclusão em banco, validação de dados
  • 56. Localização e Internacionalização Zend_Locale Zend_Date Zend_Currency Zend_Measure_*
  • 57. Localização e Internacionalização Zend_Translate Array CSV INI Gettext ...
  • 58. Localização e Internacionalização // l10n - Moedas $locale = new Zend_Locale(“pt_BR”); $moeda = new Zend_Currency(); $moeda->toCurrency(1000.00); // Saída => R$1.000,00 // i18n $ingles = array(“Você conhece PHP?” => “Do you know PHP?”, “ Sim” => “Yes”, “ Não” => “No”); $tradutor = new Zend_Translate(“array”, $ingles, “en”); $locale = new Zend_Locale(“en_US”); echo $tradutor->_(“Você conhece PHP?”); $resposta = $tradutor->_(“Sim”);
  • 59. Localização e Internacionalização User Culture: combinação do país e idioma do usuário Alterando o User Culture do usuário $this->getUser()->setCulture('pt_BR'); Helpers => informações no formato correto (de acordo com o User Culture): format_date, format_datetime, format_currency, format_number, etc Helper I18N
  • 60. Localização e Internacionalização // Texto a ser traduzido echo __('Bem vindo ao nosso site') # XML de tradução <appName>/i18n/messages.en.xml <?xml version=&quot;1.0&quot; ?> <xliff version=&quot;1.0&quot;> <file original=&quot;global&quot; source-language=&quot;pt_BR&quot; datatype=&quot;plaintext&quot;> <body> <trans-unit id=&quot;1&quot;> <source>Bem vindo ao nosso site</source> <target>Welcome to our website</target> </trans-unit> </body> </file> </xliff>
  • 61. Localização e Internacionalização Baixar ou fazer arquivo de tradução; <APLICAÇÃO>/app/locale/pt_br Configurar aqui:
  • 62. Localização e Internacionalização Mudança da linguagem a qualquer momento antes da mensagem, bootstrap, beforeFilter ou em request específico; Tratar o erro:
  • 63. Localização e Internacionalização Facilita a construção de menus internacionalizados Utiliza arquivos de linguagem para armazenar as traduções Classe Language Language helper
  • 64. Documentação e Comunidade Documentação COMPLETA Quick Start API Guia de Referência Comunidade ativa (as outras são passivas) Contribuições => FRAMEWORK!!
  • 65. Documentação e Comunidade Documentação muito boa; http://book.cakephp.org/ Comunidades ativas; Google Groups http://groups.google.com/group/cake-php?pli=1 http://bakery.cakephp.org/ IRC #cakephp on irc.freenode.net
  • 66. Documentação e Comunidade Alguns Blogs The Bakery Mark Story Ad7six Teknoid Mariano CakeDC Team Felix and Tim GrumpyCanuck Snook.ca
  • 67. Documentação e Comunidade Tutoriais Blog Wiki Livros
  • 68. Documentação e Comunidade A documentação é bem resolvida. (Vem junto com o download do framework) Wiki Fórum Livros
  • 69. E mais... Múltiplas aplicações Informações de Benchmark Template parser Assistente de flexão gramatical Scaffolding
  • 70. E mais... Testes unitários e funcionais Vários ambientes Configurações distintas Web debug toolbar Carga de dados ( fixtures )
  • 71. E mais... Uso de partes do framework Componentização MUITO COMPLETO Zend
  • 72. E mais... NADA !!!!!!
  • 73. Quem aqui usa... Cake PHP? Code Igniter? Symfony? Zend Framework?
  • 75. Conclusão Similaridades PHP 5.x OO MVC ORM Formulários e Validações Cache Internacionalização e Localização Extensíveis
  • 76. Conclusão AUMENTO DE PRODUTIVIDADE
  • 77. Conclusão Escolha o framework que melhor atende às necessidades do seu projeto!!!
  • 78. CONTATOS Leonardo Thomas [email_address] Marcelo Curi [email_address] Márcio Albuquerque [email_address] Sandro Franco [email_address]