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]

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 declasses Funcionalidade específica Dita o fluxo de controle da aplicação
  • 5.
  • 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çãoBaixar o pacote Cria-se uma estrutura de diretórios (zf.sh) Configurar o bootstrap Configurar o application.ini Configurar o .conf (opcional)
  • 10.
    ESTE é oFramework! 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çãoDownload 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ãoviram 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çãoBaixa 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çãoTrê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 Xtreme P rogramming Arquitetura
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
    Conceito de FrameworkConjunto de classes Funcionalidade específica Dita o fluxo de controle da aplicação
  • 22.
    Acesso a Dadose ORM ORM próprio Implementa Active Record (Dados -> Class -> Objeto) Exemplo: Tabela Usuarios: id, nome, sobrenome, login, senha
  • 23.
  • 24.
    Acesso a Dadose ORM Disponibiliza o padrão Active Record modificado Leitura fácil É bonito de se ver...
  • 25.
    Acesso a Dadose 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 Dadose ORM Também trabalha com Active Record PDO para acesso a dados
  • 27.
    Acesso a Dadose 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 Dadose 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 Dadose 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çõessfForm sfFormPropel sfFormDoctrine sfValidator (sfValidatorDate, sfValidatorDateRange, sfValidatorEmail, sfValidatorNumber, sfValidatorInteger, sfValidatorString, sfCallbackValidator) Comando symfony propel:build-forms
  • 31.
    Formulários e Validaçõesclass 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(); }
  • 33.
  • 34.
    Formulários e ValidaçõesFormulá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, ...
  • 35.
  • 36.
    Formulários e ValidaçõesZend_Form Validation Zend_Form_Element_* XSS e SQL Injection Zend_Validation
  • 37.
    Formulários e Validaçõesclass 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çõesTambé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 orecurso 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: BackendArquivo Banco de Dados Memcache (memória) APC Xcache ...
  • 45.
    Cache Zend_Cache: FrontendSaída de Dados ( Output ) Função Classe Página ...
  • 46.
    Cache // Construçãodo 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 ofereceum 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 Como AuthComponent é possível retirar ou conceder permissões facilmente ao usuário.
  • 50.
    Segurança Autorização Como SecurityComponent é possível implementar algumas características muito poderosas da segurança.
  • 51.
    Segurança Configuração emarquivo 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ãode 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çãoZend_Locale Zend_Date Zend_Currency Zend_Measure_*
  • 57.
    Localização e InternacionalizaçãoZend_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çãoUser 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çãoBaixar ou fazer arquivo de tradução; <APLICAÇÃO>/app/locale/pt_br Configurar aqui:
  • 62.
    Localização e InternacionalizaçãoMudança da linguagem a qualquer momento antes da mensagem, bootstrap, beforeFilter ou em request específico; Tratar o erro:
  • 63.
    Localização e InternacionalizaçãoFacilita a construção de menus internacionalizados Utiliza arquivos de linguagem para armazenar as traduções Classe Language Language helper
  • 64.
    Documentação e ComunidadeDocumentação COMPLETA Quick Start API Guia de Referência Comunidade ativa (as outras são passivas) Contribuições => FRAMEWORK!!
  • 65.
    Documentação e ComunidadeDocumentaçã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 ComunidadeAlguns Blogs The Bakery Mark Story Ad7six Teknoid Mariano CakeDC Team Felix and Tim GrumpyCanuck Snook.ca
  • 67.
    Documentação e ComunidadeTutoriais Blog Wiki Livros
  • 68.
    Documentação e ComunidadeA documentação é bem resolvida. (Vem junto com o download do framework) Wiki Fórum Livros
  • 69.
    E mais... Múltiplasaplicações Informações de Benchmark Template parser Assistente de flexão gramatical Scaffolding
  • 70.
    E mais... Testesunitários e funcionais Vários ambientes Configurações distintas Web debug toolbar Carga de dados ( fixtures )
  • 71.
    E mais... Usode partes do framework Componentização MUITO COMPLETO Zend
  • 72.
  • 73.
    Quem aqui usa...Cake PHP? Code Igniter? Symfony? Zend Framework?
  • 74.
  • 75.
    Conclusão Similaridades PHP5.x OO MVC ORM Formulários e Validações Cache Internacionalização e Localização Extensíveis
  • 76.
    Conclusão AUMENTO DEPRODUTIVIDADE
  • 77.
    Conclusão Escolha oframework 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]