php framewarks - fisl

78

Upload: marcio-albuquerque

Post on 06-Jun-2015

1.886 views

Category:

Documents


4 download

DESCRIPTION

The Battle for the best PHP framework! Presentation took place at FISL - Free and Open Source Software International Forum.

TRANSCRIPT

Page 1: PHP FrameWARks - FISL
Page 2: PHP FrameWARks - FISL

PHPFrameWARks

Palestrantes: Leonardo ThomasMarcelo CuriMárcio AlbuquerqueSandro Franco

26/06/2009

Page 3: PHP FrameWARks - FISL

O que é um framework?

Page 4: PHP FrameWARks - FISL

Framework

Conjunto de classes

Funcionalidade específica

Dita o fluxo de controle da aplicação

Page 5: PHP FrameWARks - FISL

Framework

Page 6: PHP FrameWARks - FISL
Page 7: PHP FrameWARks - FISL
Page 8: PHP FrameWARks - FISL

O Framework!

Framework COMPLETO para desenvolvimento de aplicações

Última versão estável: 1.8.4

PHP 5.x

Page 9: PHP FrameWARks - FISL

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)

Page 10: PHP FrameWARks - FISL

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

Page 11: PHP FrameWARks - FISL

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

Page 12: PHP FrameWARks - FISL

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

Page 13: PHP FrameWARks - FISL

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

Page 14: PHP FrameWARks - FISL

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

Page 15: PHP FrameWARks - FISL

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

Page 16: PHP FrameWARks - FISL

DRY

eXtreme Programming

Arquitetura

Page 17: PHP FrameWARks - FISL

Arquitetura

Page 18: PHP FrameWARks - FISL

Arquitetura

Page 19: PHP FrameWARks - FISL

Arquitetura

Page 20: PHP FrameWARks - FISL

Arquitetura

Page 21: PHP FrameWARks - FISL

Conceito de Framework

Conjunto de classes

Funcionalidade específica

Dita o fluxo de controle da aplicação

Page 22: PHP FrameWARks - FISL

Acesso a Dados e ORM

ORM próprio

Implementa Active Record

(Dados → Class → Objeto)

Exemplo:

Tabela Usuarios:

id, nome, sobrenome, login, senha

Page 23: PHP FrameWARks - FISL

Acesso a Dados e ORM

Page 24: PHP FrameWARks - FISL

Acesso a Dados e ORM

Disponibiliza o padrão Active Record modificado

Leitura fácil

É bonito de se ver...

Page 25: PHP FrameWARks - FISL

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

Page 26: PHP FrameWARks - FISL

Acesso a Dados e ORM

Também trabalha com Active Record

PDO para acesso a dados

Page 27: PHP FrameWARks - FISL

Acesso a Dados e ORMclass Usuarios extends Zend_Db_Table

{

protected $_name = "usuarios";

}

// Controller

public function indexAction()

{

$usuarios = new Usuarios();

$this->view->usuarios = $usuarios->fetchAll();

}

Page 28: PHP FrameWARks - FISL

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

Page 29: PHP FrameWARks - FISL

Acesso a Dados e ORMclass 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; }}

Page 30: PHP FrameWARks - FISL

Formulários e Validações

sfForm

sfFormPropel

sfFormDoctrine

sfValidator (sfValidatorDate, sfValidatorDateRange, sfValidatorEmail, sfValidatorNumber, sfValidatorInteger, sfValidatorString, sfCallbackValidator)

Comando

symfony propel:build-forms

Page 31: PHP FrameWARks - FISL

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'; }}

Page 32: PHP FrameWARks - FISL

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

Page 33: PHP FrameWARks - FISL

Formulários e Validações

Page 34: PHP FrameWARks - FISL

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, ...

Page 35: PHP FrameWARks - FISL

Formulários e Validações

Page 36: PHP FrameWARks - FISL

Formulários e Validações

Zend_Form

Validation

Zend_Form_Element_*

XSS e SQL Injection

Zend_Validation

Page 37: PHP FrameWARks - FISL

Formulários e Validaçõesclass 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)); }}

Page 38: PHP FrameWARks - FISL

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...

Page 39: PHP FrameWARks - FISL

$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');}

Formulários e Validações

Page 40: PHP FrameWARks - FISL

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

Page 41: PHP FrameWARks - FISL

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.

Page 42: PHP FrameWARks - FISL

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.

Page 43: PHP FrameWARks - FISL

Cache

Configuração simples:

Configure::write('Cache.check', true), no core.php;

Utilizar um dos padrões de configuração disponíveis

Page 44: PHP FrameWARks - FISL

Cache

Zend_Cache:

Backend

Arquivo

Banco de Dados

Memcache (memória)

APC

Xcache

...

Page 45: PHP FrameWARks - FISL

Cache

Zend_Cache:

Frontend

Saída de Dados (Output)

Função

Classe

Página

...

Page 46: PHP FrameWARks - FISL

Cache// Construção do objeto cache$cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions);

// Exemplo de cache de Saídaif (!($cache->start('meu_cache'))){ echo ”Isso está em cache (“.time().”)“; $cache->end();}

echo “Isso NÃO está no cache”.time().”)”;

Page 47: PHP FrameWARks - FISL

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

Page 48: PHP FrameWARks - FISL

Cache#<appName>/config/settings.ymldev: .settings: cache: on

#<appName>/modules/<moduleName>/config/cache.ymllist: 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)

Page 49: PHP FrameWARks - FISL

Segurança

Autenticação

Com o AuthComponent é possível retirar ou conceder permissões facilmente ao usuário.

Page 50: PHP FrameWARks - FISL

Segurança

Autorização

Com o SecurityComponent é possível implementar algumas características muito poderosas da segurança.

Page 51: PHP FrameWARks - FISL

Segurança

Configuração em arquivo YAML#<appName>/config/security.yml

all:

is_secure: on

credentials: [[ admin, gerente ], usuario]

sfUsersetAuthenticated()

isAuthenticated()

addCredential()

hasCredential()

Page 52: PHP FrameWARks - FISL

Segurança

Zend_Acl

Papéis (Roles)

Recursos (Resources)

Zend_Auth

Banco de Dados

HTTP

LDAP

Digest

OpenID

Page 53: PHP FrameWARks - FISL

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”);

Page 54: PHP FrameWARks - FISL

Segurança$auth = new Zend_Auth;

$adapter = new Zend_Db_Adapter_Pdo_Sqlite( array('dbname' => ':memory:') );

$resposta = $auth->authenticate($adapter);

if ($resposta->isValid()){ ...}

Page 55: PHP FrameWARks - FISL

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

Page 56: PHP FrameWARks - FISL

Localização e Internacionalização

Zend_Locale

Zend_Date

Zend_Currency

Zend_Measure_*

Page 57: PHP FrameWARks - FISL

Localização e Internacionalização

Zend_Translate

Array

CSV

INI

Gettext

...

Page 58: PHP FrameWARks - FISL

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”);

Page 59: PHP FrameWARks - FISL

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

Page 60: PHP FrameWARks - FISL

Localização e Internacionalização// Texto a ser traduzidoecho __('Bem vindo ao nosso site')

# XML de tradução <appName>/i18n/messages.en.xml <?xml version="1.0" ?> <xliff version="1.0"> <file original="global" source-language="pt_BR" datatype="plaintext"> <body> <trans-unit id="1"> <source>Bem vindo ao nosso site</source> <target>Welcome to our website</target> </trans-unit> </body> </file> </xliff>

Page 61: PHP FrameWARks - FISL

Localização e Internacionalização

Baixar ou fazer arquivo de tradução;

<APLICAÇÃO>/app/locale/pt_br

Configurar aqui:

Page 62: PHP FrameWARks - FISL

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:

Page 63: PHP FrameWARks - FISL

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

Page 64: PHP FrameWARks - FISL

Documentação e Comunidade

Documentação COMPLETA

Quick Start

API

Guia de Referência

Comunidade ativa (as outras são passivas)

Contribuições => FRAMEWORK!!

Page 65: PHP FrameWARks - FISL

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

Page 66: PHP FrameWARks - FISL

Documentação e Comunidade

Alguns Blogs

The Bakery

Mark Story

Ad7six

Teknoid

Mariano

CakeDC Team

Felix and Tim

GrumpyCanuck

Snook.ca

Page 67: PHP FrameWARks - FISL

Documentação e Comunidade

Tutoriais

Blog

Wiki

Livros

Page 68: PHP FrameWARks - FISL

Documentação e Comunidade

A documentação é bem resolvida. (Vem junto com o download do framework)

Wiki

Fórum

Livros

Page 69: PHP FrameWARks - FISL

E mais...

Múltiplas aplicações

Informações de Benchmark

Template parser

Assistente de flexão gramatical

Scaffolding

Page 70: PHP FrameWARks - FISL

E mais...

Testes unitários e funcionais

Vários ambientes

Configurações distintas

Web debug toolbar

Carga de dados (fixtures)

Page 71: PHP FrameWARks - FISL

E mais...

Uso de partes do framework

Componentização

MUITO COMPLETO

Zend

Page 72: PHP FrameWARks - FISL

E mais...

NADA !!!!!!

Page 73: PHP FrameWARks - FISL

Quem aqui usa...

Cake PHP?

Code Igniter?

Symfony?

Zend Framework?

Page 74: PHP FrameWARks - FISL

Conclusão

Page 75: PHP FrameWARks - FISL

Conclusão

Similaridades

PHP 5.x

OO

MVC

ORM

Formulários e Validações

Cache

Internacionalização e Localização

Extensíveis

Page 76: PHP FrameWARks - FISL

Conclusão

AUMENTO DE PRODUTIVIDADE

Page 77: PHP FrameWARks - FISL

ConclusãoEscolha o framework que melhor

atende às necessidades do seu projeto!!!