ano 2 | edição 4 novembro-dezembro/2011 Editorial

Mais uma edição da PHP Review Expediente

Editor-chefe: Salve, salve amigos! Depois de muita luta para manter a revista de pé, André Luiz Pinheiro [email protected] conseguimos chegar a mais uma edição da PHP Review. Foram oito meses desde a última edição, quando o previsto era para ser apenas um. Infeliz- Editoração: mente, ainda temos que contar com o apoio e a colaboração de voluntários. Digital 3i [email protected] No entanto, isso vai mudar a partir desta edição. Mas, vamos ao que inte- ressa... . Conteúdo: Alexandre “Taz” Andrade Nesta edição, vamos falar da programação utilizando Frameworks [email protected] em PHP. Para você que está cansado de programar “na unha” este é o mo- mento de mudar radicalmente a sua forma de trabalhar. Você vai ver que a Editorial: André Luiz Pinheiro utilização de MVC facilita muito o desenvolvimento de sistemas e de sites, [email protected] tanto na questão de organização de código como no reaproveitamento do que foi programado. Por isso, Elton Minetto faz um apanhado geral de Jornalista: Leonardo Valente como utilizar um framework; as [muitas] vantagens e [algumas] desvantagens [email protected] de utilizar cada um deles. Também seremos mergulhados neste mundo de vez com a apresentação de quatro grandes frameworks: CakePHP, Zend Capa: João Corrêa Framework, CodeIgniter e Kohana. Você não somente aprenderá a utilizar [email protected] um framework como também aprenderá a instalar alguns deles. Colaboradores: Além disso, temos também as nossas colunas de testes, o “#papo- Ademir Cristiano Gabardo deprogramador” e a volta da coluna “Simples assim”, além das estréias dos Alexandre “Taz” Andrade Cauan Cabral quadros “Mão na massa” e “Vida de programador”. Elton Luís Minetto Esta edição marca ainda o início das parcerias [que acreditamos Rafael Dohms serem duradouras] com a Digital 3i e a Hypersites. A Digital 3i vai ser Roberto S. Lima a responsável pela reforma gráfica da revista e de nosso website, e a Hyper- Anúncios: sites vai ficar responsável pela programação do site. Além disso, passamos Equipe PHP Review a contar com a colaboração do jornalista Leonardo Valente. A PHP Review [email protected] vai também intensificar sua estratégia de publicidade, com a criação de ban- ners para a divulgação em sites e blogs. Todas as informações e dados Esperamos que gostem desta edição, aproveitem bastante seu con- técnicos que constam nos artigos e demais conteúdos teúdo e lembre-se: seu feedback é muito importante para a nossa revista. Até editoriais têm exclusivo a próxima! objetivo informativo. A revista não se responsabiliza por aplicações ou usos incor- retos de qualquer uma dessas Equipe PHP Review. informações.

2 PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net Nesta Edição

CAPA

Frameworks 10 Fizemos um passeio pelos principais frameworks em PHP para que você conheça melhor cada um deles

CakePHP 16 Aprenda a instalar e configurar de forma muito fácil

Web Enterprise com Zend Framework 20 É possível construir uma aplicação robusta usando ZF?

Kohana 23 Você também deveria usá-lo

ACONTECE COLUNAS

Geral Mas porque quero escrever testes? 6 Jquery 1.6.3 disponível 4 Muito além do código 8 PostgreSQL 9.1 RC1 4 Acordo garante periodicidade da revista 4 Não seja escravo do Framework 9 PHP

Versão 5.3.8 já está disponível 5 CakePHP mais perto da versão 2.0 5 Core do PHP usará GIT 5 ARTIGOS Lançamento do 2.0 5

Frameworks Agenda 5 Autenticação de usuário com Code Igniter 26

MÃO NA MASSA

Enviando E-mail com PHP Mailer e Smarty 28

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 3 Acontece

4 Jquery 1.6.3 disponível 4 PostgreSQL 9.1 RC1

Foi lançado no último dia 01/09 a nova versão do Foi disponibilizado no último dia 22/08 a primeira Jquery onde foram corrigidos muitos bugs, prin- versão Pré-Release do PostgreSQL 9.1. cipalmente relacionados a ataques XSS, que eram O Postgre é um poderoso e completo Banco de dados executados quando uma chamada $() não conti- gratuito. Dentre as principais funcionalidades, estão nha nenhum parâmetro. Também foram realizadas suporte a trigger, Stored Procedure, View. Os dados, melhorias no tratamento de atributos HTML 5. divididos em tablespaces, apresentam alto grau de Para a correção do bug, é necessário alterar o arqui- segurança e garantia de performance. vo no servidor, inclusive o nome do mesmo. Para baixar a nova versão do SGDB PostegreSQL, Baixe agora mesmo a nova versão do Jquery na acesse (http://www.postgresql.org/download/). versão mínima (http://bit.ly/oN5evq) ou na versão completa (http://bit.ly/riF2mg).

4 Nova parceria garante periodicidade da PHP Review

Uma parceria firmada no mês de agosto vai garantir a nossa periodicidade. O acrodo foi firmado com a Digital 3i, empresa do ramo de editoração on-line, que passa a administrar graficamente a revista. Com isso, nós da PHP Review continuamos a fazer toda a adminstração do conteúdo técnico da revista, garantindo assim a manutenção de nossa qualidade. Faz parte do acordo, a reestruturação da diagramação da revista, a reformulação do design do nosso site, a retipagem da logomarca, mas este não é o maior ganho que teremos. A Digital 3i atua forte- mente na publicação online de revistas. Nós ganharemos, pois desta foram a PHP Review passa a ter um leitor on-line de conteúdo, que pode ser acessível por qualquer smartphone android, além de tablets, IPhone e IPad. Algumas alterações já poderão ser vistas nesta 4ª edição, outras, porém, só surgirão nas próximas edições.

Enquete

Perguntamos aos nossos seguidores do Twitter: Qual o editor PHP que você usa? Confira abaixo o resultado. Entre no nosso site e responda a nossa próxima en- quete: Você acha válida a certificação em PHP? PHP Editor http://www.phpreview.net TextMate 3.0 Você já pode enviar seu artigo para as próximas Outros edições. No nosso síte é possível ver a data prevista Dreamweaver de lançamento e o tema de cada revista que será lançada. Mais detalhes em: http://www.phpreview.net/edicoes/envio Unicode PDT Netbeans

4 PHPReview | 4ª edição | julho-agosto/2011 | www.phpreview.net 4 Core do PHP será gerenciado no GIT Depois de uma enquete realizada entre os desenvolvedores do core do PHP, a maioria decidiu trocar o gerenciamento do código fonte para um servidor GIT. Esta mudança será realizada até dezembro deste ano. Criado por Linus Torvalds para gerenciar o código fonte do kernel do Linux , o GIT passou a ter adeptos rapidamente devido a sua facilidade de utilização e armazenamento de histórico, uma vez que toda a árvore é replicada em cada branch criado. Existe hoje um livro (em inglês) que introduz o usuário no mundo do GIT e é distribuido gratuitamente em (http://progit.org).

4 Lançamento do Symfony 2.0 4 PHP 5.3.8 disponível O Symfony 2.0 foi lançado em julho deste ano e che- Foi lançada no dia 23 de agosto a versão 5.3.8 do ga cheio de novidades em relação a versão 1.4. PHP. Desta vez, foram feitas apenas duas correções Dentre as novidades estão: Estrutura de diretório, pontuais: a função crypt (), que quando era usa- que foi melhorada para utilização mais fácil de he- da com MD5 retornava apenas o salt da critografia, ranças; criação de um sistema otimizado de auto- e um bug no Open SSL que gerava timeout nas req- loadings, criação facilitada de aplicações comuns, uisições, o que foi corrigido com o retorno do código como websites, blogs, etc. da versão 5.3.6. Você já pode baixar a nova versão Vale a pena conferir estas mudanças em no endereço (http://symfony.com). (http://www.php.net/downloads.php).

4 Cake lança versão 2.0 Foi lançada no último dia 16/10 a tão aguardada versão 2.0 do framework CakePHP, que apresenta um grande “pacote” de melhorias em relação à última versão estável (1.3.11). Segundo os desenvolve- dores apenas alguns bugs foram corrigidos antes do lançamento oficial do Cake 2.0. O Core do Cake foi praticamente refeito, com melhorias que vão desde simples correções na utili- zação de rotas com refatoração de todo o sistema de testes (http://github.com/cakephp/cakephp/ tree/2.0). Você poderá conhecer mais sobre o Cake nesta edição no artigo do Cauã Cabral.

Agenda PHP

Confira os eventos e já coloque na sua agenda.

International PHP TDC2011 PHPConference Seu evento nesta lista... Conference 29 e 30/10/2011 1 a 4/12/2011 Goiânia - GO UNIFIEO - Osasco - SP 9 a 12/10/2011 Envie um e-mail para Mainz - Alemanha [email protected] Latinoware 2011 Encontro Nordeste SL Hack’n’Rio informando o nome do 19 a 21/10/2010 28 a 30/10/2011 02 e 03/12/2011 evento, a data e o local. Usina de Itaupu - PR Alagoas - SE UERJ - Rio de Janeiro Pronto! Seu evento estará Zend PHP Conference PHP’n’Rio 2011 na nossa agenda na próxima 17 a 20/10/2011 05/11/2011 edição. Santa Clara - Califórnia CEFETRJ - Rio de Janeiro

PHPReview | 4ª edição | julho-agosto/2011 | www.phpreview.net 5 Teste, unitário a completo

Mas por que quero escrever testes? /** * @nome Rafael Dohms * @email [email protected] * Rafael Dohms é Engenheiro da Computação, trabalha com PHP há mais de 10 anos e participa ativamente * da comunidade PHP. Co-Fundador e Coordenador do PHPSP já ajudou a fundar grupos de PHP em outros * estados e é um dos hosts do PHPSPCast, em seu tempo livre ele procura organizar ações junto a * comunidade para ajudar o PHP a crescer no mercado. www.rafaeldohms.com.br. ***/

assunto despertou seu interesse? Ao menos eu es- linda tempestade de código, horas concentrado até que você pero que este seja o motivo pelo qual você voltou finalmente declara, estou pronto. O para ler mais um artigo desta coluna, mas e agora? Ok, mentira. Durante este processo você provavel- Se o assunto é novo para você, a pergunta em sua cabeça mente passou pelo velho ritual do F5: você escreve um có- agora deve ser algo em torno de; “Mas por que eu preciso digo, abre o browser, preenche o formulário de 30 campos, de testes?” ou “O que eu tenho a ganhar com essa prática?”. aperta submit e … ops, um erro, volta pro código, preenche Ótima pergunta, permita-me mais uma ou duas páginas para o formulário de novo (xinga a validação JS) e … Bem, aqui tentar lhe convencer de que você precisa deles. você pode dar sorte, o seu código pode funcionar, mas Em primeiro lugar precisamos definir o seu perfil. geralmente este processo se repetirá algumas dezenas de Eu vou simplificar ao extremo aqui e dividir os leitores em vezes até o final do sistema. Depois disso você volta e testa duas camadas: desenvolvedores e gerentes. Para ficar bem tudo novamente, em um servidor de homologação (mais claro, vamos definir o desenvolvedor aquele responsável pensamento positivo!). Com tudo de acordo você empurra por produzir o código e eventualmente corrigir os bugs e o código pra frente e lá vai ele para seu cliente. dar manutenção, e como gerentes todos aqueles que não Não, não, você não vai sair de férias agora, o cliente estão preocupados com o código, mas sim com os clientes acabou de ligar, achou um bug no cadastro com pessoas que e especificamente o lucro. Se analisarmos o mercado desta tem emails de 300 caracteres. Aí você entra no processo do forma cada um destes possui interesses diferentes que po- F5 novamente, corrige este bug, corrige o próximo que era dem ou não ser relacionados, mas cada um vai encarar tes- disparado pelo usuário que usa uma senha de 3 caracteres, tes de uma forma diferente. ai vem aquele lá que o email tem vários pontos e derrubou sua regex de validação. Quando você finalmente passa por tudo isso e acha que acabou, hora de seguir em frente, o “O Desenvolvedor” cliente do email de 300 caracteres volta e fala que seu email falhou de novo. Você se pergunta, “Mas como? eu já re- solvi isso antes”, claro que você não se lembra mais como resolveu e lá vai você de novo corrigir um bug recorrente. E Então você é um desenvolvedor, guerreiro do có- viveram codando para sempre… digo fonte, e possivelmente um sofredor por natureza. Va- Esta rotina foi extremamente exagerada pra mostrar mos analisar alguns aspectos do seu dia a dia. Seu trabalho diversos pontos de falha, obviamente ela não acontece dessa começa com um pedido, ou uma requisição, alguns deta- forma para todos, eu espero. Mas se estou certo você se lhes e um prazo. Munido deste “problema” e do relógio de identificou com a natureza de um ou dois destes pontos de contagem regressiva você marcha em frente procurando a falha que descrevi, já passou por algo parecido ou cometeu solução para este problema. Vou fazer um pouco de pen- erros similares. Mas o que testes tem a ver com isso? Vamos samento positivo e dizer que você primeiro pára um pouco avaliar o processo passo a passo: para analisar o problema e como sua arquitetura deve se Na fase inicial, de projeto, imagine que ao invés de estruturar para resolver isso, alguns diagramas UML, uma um apanhado de ideias você tivesse uma estrutura de testes, ideia geral do comportamento de seus objetos e seu sistema um grupo de funções que definem entradas (dados) e saídas como um todo. Em seguida você se isola no mundo do seus (dados processados). Ou seja, você define que vai existir um fones de ouvido e sua escolha de som, seja ela rock, psy, objeto responsável por transformar um array em um XML, pop ou até sertanejo (eu prefiro músicas de video game em e escreve um teste para isso passando um array e testando versão metal rock), e o que que acontece em seguida é uma

6 PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net COLUNA | teste, de unitário a completo que a saída é um XML compatível com esta entrada. Este extra, o prazo vai aumen- você vai precisar processo se chama Test Driven Development, os testes nas- tar, o cliente vai esperar cem antes do código e é um ótimo exercício para achar as mais, e eu perco dinhei- escrever mais código, falhas na sua lógica antes de codar, talvez uma classe que ro”. É um pensamento pois agora esta não tinha imaginado, ou uma sequência que irá falhar. Além válido se você analisar a escrevendo testes disso você tem um conjunto claro de regras para validar seu situação a curto prazo ou além do código, mas sistema quando ele estiver pronto. com uma visão limitada, você ganhará muito Mesmo que a fase inicial não produza estes arte- testes tem uma função a fatos, pense no ritual do F5. Preencher aquele formulário longo prazo e vão muito mais produtividade e é um saco né? Suponhamos que você possui um método além da primeira entrega qualidade de código que vai processar aquele formulário, é ele que você esta co- do sistema. dando e debugando não é? Você já sabe os dados de en- Uma estrutura de trada, afinal você esta digitando eles no formulário a cada testes bem desenhada e uma cultura de testes bem imple- 5 minutos, e se ao invés e usar o formulário você simule mentada em sua equipe terá como resultado uma alteração ele? Um teste simples que passa para o seu código um de prazo muito pequena, ou até mesmo pode gerar uma array de valores, no mesmo formato que o form iria pas- redução no prazo. Por exemplo, no caso que descrevi ao sar. Agora ficou fácil, você vai na linha de comando roda os desenvolvedor, se ele elimina o processo de repetição de- testes, valida o resultado, usa um debug para acompanhar morada do form, ele pode debuggar e finalizar aquele có- os valores internamente na função ou até vai ao extremo digo mais rápido e entregar o sistema mais rápido. Com a de usar uns var_dump aqui e ali. Você acabou de matar o prática e experiência fica mais simples e rápido escrever tes- processo mais demorado (e chato!) que era o de preencher tes, identificar pontos onde se deve implementar remover o formulário. dependências e tudo corre mais rapidamente. E os bugs recorrentes? Imagina que ao receber um O resultado deste investimento inicial é muito posi- aviso de bug você adicione a sua massa de dados (os da- tivo, você vai ter um produto mais confiável, uma métrica dos simulados que você passa a sua função) um email de de qualidade que pode se aliar a outras ferramentas como 300 caracteres, você vai facilmente identificar o ponto de a Integração Contínua e trazer certeza a toda entrega de seu falha, mas agora além disso você ainda tem um certifica- produto, o número de bugs é reduzido, o código fica mais do de que este bug não irá voltar, se voltar você vai ter um limpo e organizado, e mudanças podem ser feitas sem medo teste falhando pra lhe avisar muito antes do código chegar de efeitos colaterais. Isso tudo traz muita flexibilidade ao a produção. Imagine reescrever pedaços de seu código sem seu produto e confiança a sua equipe de desenvolvimento. medo de que esta alteração vá alterar outro pedaço do seu Mas nada disso acontece se a prática não foi levada sistema que você nunca imaginou poderia ser afetado. a sério e o investimento inicial, onde alguns prazos serão Estes são alguns aspectos do que a prática de testes atrasados e mais tempo será gasto em planejamento, não for pode trazer para um desenvolvedor. Sim, você vai precisar feito e cumprido. Não adianta ficar gritando com a equipe escrever mais código, pois agora esta escrevendo testes além que o produto não esta pronto se o prazo final não foi alcan- do código, mas você ganhará muito mais produtividade e çado ainda. qualidade de código, podendo lhe salvar o tempo que pas- saria corrigindo bugs e testando formulários. Parece muito trabalho inicialmente mas a facilidade que acompanha este Convencido? processo facilmente conquista qualquer um.

Enfim, espero que meu objetivo de lhe convencer que precisa de testes foi cumprido, ou que pelo menos esta “O Gerente” pensando com mais calma e sua mão esta coçando para no mínimo tentar escrever um teste e ver como é. No artigo anterior analisamos as ferramentas e como escrever testes. Ok, você é o gerente, mestre do domínio e senhor Nas próximas edições vamos começar a trilhar um caminho do chicote. Brincadeira, você é o responsável por tudo isso, e em breve vou poder rechear esta página com muito mais pelo time estar trabalhando e pelo cliente estar feliz, e o código. caixa da empresa cheio. Mas o que testes podem trazer para Até lá! ?> você? Seu primeiro pensamento é: “Se eles vão ter trabalho

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 7 #papodeprogramador Muito além do código /** * @nome Alexandre Taz * @email [email protected] * Alexandre “TAZ” dos Santos Andrade atua há 8 anos no mercado de PHP. Já trabalhou e prestou serviços * nas mais diversas áreas e em empresas de todos os tamanhos, tais como Rede Bandeirantes de Televisão * e PRODESP. Atualmente, é desenvolvedor Sênior PHP/MYSQL, locado na Atos Origin. É entusiasta da * comunidade PHP e partidário de uma postura mais profissional para fortalecer o PHP no mercado. ***/

Ficou clara a ideia? Sim, porque saber algoritmos, tudo sobre a sua linguagem e banco de dados é uma coisa da sua área, mas ir além é o que diferencia os profissionais realmente valo- Galera, hoje eu vou tratar de um assunto muito sé- rizados no mercado. É preciso conhecer o negócio, mas mais rio para os programadores: o que saber além do código. do que isso, é preciso fazer saber que você conhece o negócio. Não estou me referindo sobre que ferramentas aprender, Isso deve ser feito sem arrogância, fazendo pequenas sugestões, ou que livro ler, não estou tratando de como tornar um conversando com seus colaboradores com o vocabulário do produto atraente para seu chefe e para a sua organização. negócio, minimizando o tecniquês, passando a impressão de Mas, o que eu quero dizer com isso? É simples. que você é um cara mais agradável e não outro geek de TI. Es- Conheço programadores muito bons, mas que têm um de- pero que o artigo desta edição tenha sido útil e que vocês possam feito muito sério: não sabem se vender. E isso vai muito aproveitá-lo de alguma maneira para a reflexão sobre atuação e além do marketing pessoal, e que quando tem de negociar valorização profissional. ?> um aumento de salário e não se consegue. É preciso en- tender que no mercado de Desenvolvimento as empresas compram um produto, o nosso conhecimento. E nós deve- mos vender. É neste ponto que devemos prestar atenção. VAS: Value-added Service, Isso deve te nortear desde a busca de um novo tra- muito usado no setor de balho até na hora de negociar melhores condições. Sem Telecomunicação. contar que isso é o diferencial para o que quer que você faça. Um exemplo bem claro, quando eu vou procurar tra- MSISDN: número único de identificação de uma assinatura em uma rede móvel balho e entro numa empresa de VAS, área que atuei muito GSM ou UMTS. tempo, deixo bem claro na entrevista técnica que já domino alguns conceitos da indústria, como o que é MSISDN, os que são TOKENS, as principais agregadoras, conceitos de TOKEN: Arquivo utilizado topup etc. Isso demonstra que o empregador terá menos para informar que um dis- custo no meu treinamento. positivo deseja se conectar a outro. Mais do que isso: na hora de negociar o salário isso me faz pedir mais para eles do que pediria em empresa de outro ramo, pois sou mais valioso nesse mercado, oras. Mas isso não é um segredo somente para entrevista, é um se- gredo para estar dentro da empresa e conseguir progredir nela. Quando você domina o negócio da empresa, você está Quando você domina o agregando valor ao seu conhecimento como desenvolvedor, diminuindo o tempo que os usuários têm de te explicar negócio da empresa, você determinada coisa. Sugerindo melhorias, maximizando o investimento que a empresa faz em te ter em seu quadro de fun- está agregando valor ao cionários. E sabe como é: quanto mais você conhecer o mercado no qual trabalha, mais valor você tem. Quanto mais valor você seu conhecimento tem, mais deveriam recompensar o seu esforço em aprender.

8 PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net Simples assim Não seja escravo do framework /** * @nome André Luiz Pinheiro * @email [email protected] * André Luiz Pinheiro é programador PHP há 6 anos, trabalhando como * freelancer na construção de sites de e-commerce. Já trabalhou como * consultor em empresas como Vale, banco BMG e Serpro. Também faz * parte da equipe de desenvolvimento do Smarty 3.0. ***/

queles que acompanham a evolução do PHP, no que diz respeito à pro- O melhor framework Agramação, têm acompanhado também o surgimento de uma nova forma de programar: é aquele que a utilização do Framework. Esta funcionalidade facilita muito o desenvolvimento de aplicações se adapta a sua web, seja em websites, webservices ou em siste- mas on-line. No entanto, trata-se de um recurso forma de programar que deve ser usado com moderação para que o seu programa não acabe sendo escravo deste ou daquele framework. Nos tempos em que o PHP não tinha sequer a menor expectativa de possuir orientação a objeto, a programação modular era a forma mais limpa de se ter o código fonte. Bons tempos aqueles em que o programador detinha o controle da situação; quando os módulos criados serviam para facilitar sua vida e não para ditar a regra com a qual ele estaria programando. A partir da versão 4 do PHP tudo começou a mudar. O suporte a orientação a objeto, mesmo que da forma mais simplória possível, fez com que muitos programadores convertessem seus módulos em classes instanciáveis, escaláveis, flexíveis e muito mais simples de estendê-los. Estes módulos passaram a ser as ferramentas de trabalho que o programador possuía. Hoje, são inúmeros os frameworks existentes em PHP. Kohana, Zend, CodeIgniter, Symfony, Cake, PHPBurn são alguns exemplos. Mas o que difere um do outro? Cada um tem a sua especificidade, a sua forma de ser trabalhado. Todos eles são “conjuntos de ferramentas para auxiliar o programador no momento do desenvolvimento da aplicação”. Não se deve, por- tanto, programar baseando-se em um framework e sim utilizá-lo para o seu trabalho diário. Infelizmente, hoje em dia, tenho visto muitos comentários em grupos de usuários per- guntando qual o melhor ou o pior framework que existe. A resposta é muito simples: o melhor é aquele que se adapta a sua forma de programar. Logicamente, você tem que se enquadrar na forma como o framework trabalha, mas isto não pode ser uma imposição, mas conseqüência de uma escolha do programador. Pense assim: você tem um parafuso Philips para abrir. Se você possui um conjunto de chaves, você pode escolher a chave Philips com tamanho ideal para o seu parafuso; se usar a chave maior não cabe na fenda e você não soltará o parafuso. Se você usar a chave menor, cai corroer a fenda do parafuso e não o abrirá. Você também não pode ter uma chave Philips e achar que todos os parafusos serão abertos por ela, pois se for um parafuso de fenda, com a sua única chave você não conseguirá abri-lo. O mesmo ocorre na “ferramenta de desenvolvimento”. Escolha com consciência a sua ferramenta de trabalho, ela irá aumentar muito a sua produtividade, mas se você se tornar escravo do framework não poderá desenvolver melhorias além das que existem no modo escolhido. ?>

PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net 9 E agora, qual Framework usar? Fizemos um passeio pelos principais frameworks em PHP para que você conheça melhor cada um deles por Elton Minneto

O que é um Framework?

m framework de desenvolvimento é uma Mas as vantagens em médio e longo prazo fazem este “base” de onde se pode desenvolver algo pequeno esforço inicial valer. Umaior ou mais específico. Trata-se de uma Como todos os desenvolvedores que usam de- coleção de códigos, classes, funções, técnicas e me- terminado framework programam usando as mesmas todologias que facilitam o desenvolvimento de novos convenções, classes e bibliotecas, a manutenção de um softwares. A idéia principal de um framework é que o programa é muito mais fácil. Mesmo que determinado desenvolvedor nunca inicie a criação de um aplicativo script tenha sido escrito por outra equipe há vários me- “do zero”. ses, não será necessário passar horas tentando enten- der para que serve a classe Foo, a variável $bar, ou se a tabela onde estão armazenados os registros de clientes Por que usar? chama-se Cliente, Clientes ou CLIENTE - como vários gerenciadores de bancos de dados são case sensitive Quando um desenvolvedor começa a estudar Cliente e CLIENTE são bem diferentes. Isto contribui um novo framework ele depara-se muitas vezes com para que novos desenvolvedores que ingressem em uma forma diferente de programar ou até de pensar uma equipe rapidamente possam se inteirar da forma um sistema. É necessário aprender uma sintaxe dife- como é trabalhado diminuindo custos e tempo para rente, convenções para nomes de arquivos, variáveis e treinamento. tabelas de banco de dados. Além disso, muitas vezes Outra vantagem da grande parte dos frame- surge a sensação de estar “engessado”, pois é preciso works é que tarefas repetitivas podem ser automati- fazer as coisas da forma que o framework trabalha e zadas. É o conceito conhecido como DRY – Don’t qualquer coisa diferente requer um pouco de trabalho. Repeat Yourself, que pode ser traduzido para “não

10 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net CAPA | E agora, qual framework usar? se repita”. Em uma aplicação que tenha que manipu- automatizada por alguma ferramenta contida no frame- lar dados vindos de uma tabela na base de dados as work. operações de inclusão, exclusão e alteração são pra- Existem outras vantagens como separação de ticamente iguais para todas as tabelas envolvidas. Não apresentação e lógica, facilidade de geração de testes teria sentido repetir o esforço para desenvolver este có- automatizados e geração de documentação. digo várias vezes e a geração destas funções poderia ser Principais Frameworks em PHP Uma das belezas do software livre é que sempre existem diversas formas de solucionar um determinado problema. Não seria diferente no quesito Frameworks. Existem diversas opções para o desenvolvedor escolher. Mas, com o tempo, alguns destes frameworks acabaram se destacando, por diferentes motivos. Neste artigo, vou citar alguns dos mais usados na atualidade.

CakePHP

O CakePHP foi o primeiro framework que eu usei profissionalmente, após ter criado o meu próprio e perceber que estava reinventando a roda. O CakePHP teve seu desenvolvimento iniciado em 2005 e atualmente encontra-se na versão 1.3.6. Algumas das vantagens de se usar o CakePHP: 4Instalação simples: ele possui poucos requisitos téc- componentes que auxiliam nessa tarefa e que podem nicos para rodar. Um servidor Web com possibilidade ser extendidos para criar validações específicas. de reescrita de urls, PHP e uma base de dados. 4Listas de controle de acesso: componentes que auxi- 4Fortemente baseado em MVC: MVC significa Mo- liam na criação de áreas restritas no aplicativo, contro- del (Modelo), View (Visão) e Controller (Controlador). lando o acesso de usuários de forma segura, flexível e É um padrão de projetos que favorece a divisão dos de simples configuração. códigos, separando a lógica de acesso a dados (Mo- delo), visualização (HTML, CSS, JS na camada de 4Helpers: são conjuntos de funções existentes no Visão) e lógica de negócios (Controlador). Usando-se framework que auxiliam no desenvolvimento da parte CakePHP evita-se a mistura de códigos, facilitando a de apresentação dos aplicativos. Existem helpers para divisão de trabalho entre a equipe auxiliar na geração de HTML, formulários, JavaScript e Ajax. Novos helpers podem ser criados para ser reu- 4Validações de campos: criar um formulário e validar tilizados em outros projetos. os dados preenchidos em cada um dos campos é uma tarefa repetitiva mas importante. O CakePHP possui 4Geração de código – uma das grandes vantagens de

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 11 E agora, qual framework usar? | CAPA

utilizar um framework como o CakePHP é a possibili- códigos e novos projetos é de uma utilidade incrível. dade de geração de códigos para evitar o esforço repeti- Com ela é possível acelerar o desenvolvimento de um tivo. O CakePHP apresenta uma ferramenta chamada novo projeto de maneira significativa. Além da geração bake, que permite a criação dos diretórios da aplicação de códigos e dos ítens citados acima, outro ponto im- além da geração de código CRUD. CRUD é um acrô- portante é a existência de uma comunidade de usuários nimo para Create, Retrieve, Update e Delete, que em ativa. Através de sites, blogs, fórums é fácil encontrar português poderia ser traduzido para: criar, recuperar, exemplos de código, e auxílio em dúvidas e tarefas atualizar e excluir. Estas são as funções básicas que um mais complexas. aplicativo deve realizar sobre um conjunto de dados, Outro ponto interessante é a estrutura de di- por exemplo, uma tabela de base de dados. retórios do framework. É uma das mais simples, mais fáceis de se entender e aprender. Para quem está ini- O principal objetivo do CakePHP é o desen- ciando no mundo dos frameworks é fácil entender con- volvimento rápido de aplicações. E ele cumpre o que ceitos como MVC e reforçar a técnica de Orientação a promete. A ferramenta bake, responsável por gerar Objetos.

Symfony

O principal objetivo do Symfony é aumentar a velocidade de desenvolvi- mento e manutenção de aplicações web. Ele reduz as tarefas de codificação repetitivas, usando os princípios de DRY – Dont Repeat Yourself (não se re- pita) – e KISS - Keep It Simple Stupid (mantenha isto simples seu estútipo), representando a idéia de manter o software o mais simples possível. Sua primeira versão foi lançada em 2005, por Fabien Potencier, para ser utilizado por sua empresa, a Sensio – http://www.sensio.com. Após ter sido liberado sobre uma licença livre o código começou a ser mantido por uma comunidade de desenvolvedores. Algumas das vantagens:

4Facilidade de instalação: conta com formas de insta- em uma empresa onde já exista um ambiente de desen- lação facilitada, como o uso de canais PEAR. volvimento configurado, podendo reaproveitar conhe- cimento e ferramentas já dominadas pelas equipes. 4Flexibilidade: o Symfony é altamente configurável. Desde a estrutura de diretórios até bibliotecas de ter- 4Não reinventa a roda: uma das decisões de projeto ceiros, quase tudo pode ser customizado. Isso é um tomadas no desenvolvimento do framework foi a de fator importante pois facilita o framework ser inserido utilizar softwares já existentes e especializados para

12 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net CAPA | E agora, qual framework usar? fazer determinadas tarefas. Por exemplo, para a 4Gerador de códigos: o Symfony conta com uma fer- conexão com as bases de dados e ORM, o Symfony ramenta para geração de projetos e códigos. Essa fer- utiliza a biblioteca chamada Doctrine. Assim, a função ramenta agiliza o desenvolvimento de aplicações pois do Symfony é agir como unificador destas ferramentas, evita que códigos repetitivos sejam gerados. de forma que aparentem ser uma só e não um “Franks- tein” cheio de remendos. Para o desenvolvedor que já Recentemente o framework passou por uma conhece algumas destas ferramentas é mais uma van- grande reformulação, em sua vindoura versão 2.0, tagem em utilizar o Symfony, pois pode aproveitar seu que foi lançada ainda no primeiro semestre de 2011. conhecimento já adquirido. Segundo os desenvolvedores do projeto, foram imple- mentadas nessa versão o que há de mais moderno na 4Validação de campos: possui formas de validar os linguagem PHP 5.3, tornando-se um dos mais avança- dados digitados pelos usuários em formulários ou urls. dos frameworks existentes. Isso ajuda o desenvolvedor a evitar dados incorretos ou Eu usei o Symfony em poucos projetos e to- problemas de segurança dos muito pequenos, mas a minha humilde opinião quanto a ele é de ser um framework com uma curva 4Logs e debugs: Symfony possui opções de geração de aprendizado um pouco mais íngreme do que os de- de logs de atividades e debug facilitado de variáveis e mais. Mas após entender o seu funcionamento e suas ações. Essas ferramentas auxiliam muito o desenvolve- metodologias a produtividade no desenvolvimento de dor no momento de encontrar possíveis erros de inter- aplicativos realmente tem uma grande evolução, tendo ação, dados ou outros. destaque a ferramenta de geração de códigos e as fer- ramentas de auxílio ao desenvolvedor, como debug.

Zend Framework

O Zend Framework é um framework para PHP 5, orientado a objetos e basea- do em MVC, que é desenvolvido pela empresa Zend junto com a comunidade de usuários PHP.

Talvez a principal vantagem em se utilizar o Tecnicamente, o framework também possui Zend Framework é poder contar com o suporte de vários pontos interessantes. O principal deles é o fato uma empresa especializada. Isso não faz grande difer- de ser baseado em componentes reutilizáveis. Novos ença para desenvolvedores acostumados com o ecossis- componentes são adicionados na medida em que o tema de software livre, mas para o mundo dos negócios framework evolui. Atualmente, o framework encontra- isso é importante. A Zend é formada por grandes de- se na versão 1.11.2, e uma versão 2.0 está em desen- senvolvedores da linguagem PHP, como volvimento, que irá usar os recursos mais modernos do and , dois dos responsáveis por grandes PHP 5.3. quantias de códigos nas versões iniciais da linguagem. O Zend Framework é baseado nos principais pa- Ela possui parcerias importantes como IBM e Oracle, drões de projeto, sendo o mais visível para o desenvolve- o que fortalece o uso do PHP nas grandes empresas. dor o MVC, pois todo aplicativo desenvolvido segue esta filosofia.

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 13 E agora, qual framework usar? | CAPA

Eu tenho usado o framework em meus pro- Conclusão jetos por mais de dois anos e posso citar alguns dos fatores que influenciaram nessa escolha. Além dos Sei que você leu até aqui e deve estar pensando: citados acima, como a existência de uma empresa que “Legal! O Minetto vai me dizer agora qual é o melhor venda suporte, o Zend Framework é muito flexível, framework que existe!”. Mas essa é uma questão com- podendo ser estendido e seus componentes intercam- plicada de se responder. O melhor framework é o que beados com outros frameworks. Desta forma é pos- se encaixa a sua necessidade. Atualmente os frameworks sível, por exemplo, substituir o componente Zend_Db se equiparam em quesitos técnicos, o que diferencia um (res-ponsável por acesso a uma base de dados) pela bi- pouco são seus objetivos ou a forma como os atingem. blioteca Doctrine, com poucas alterações em código e O CakePHP é um framework bem acoplado, arquitetura. os seus componentes estão mais unificados, o que pode Outro fator interessante é a existência de uma torná-lo um pouco mais complexo para substituir compo- certificação a que os desenvolvedores podem se sub- nentes, mas a facilidade de entendimento de sua estrutura meter, a “Zend Framework Certification”. Isto facilita é um ponto alto. E a velocidade de desenvolvimento que na contratação de profissionais, além de valorizar o de- a ferramenta bake fornece é muito importante. senvolvedor. O Symfony possui a facilidade de seus compo- Diferentemente do CakePHP e do Symfony, nentes poderem ser substituídos e sua velocidade de de- que tem como principal objetivo acelerar o desenvolvi- senvolvimento é um ponto forte. A curva de aprendizado mais íngreme pode assustar um pouco no começo mas o mento de aplicações, o objetivo do Zend Framework é pequeno esforço é rapidamente compensado. criar projetos mais robustos, maiores, em detrimento O Zend Framework favorece a criação de apli- da velocidade de desenvolvimento. Isso não quer dizer cações mais robustas, com foco em escalabilidade e não que usar o Zend Framework seja demorado ou pou- somente em velocidade de desenvolvimento. Sua docu- co produtivo. Ele fornece ferramentas para facilitar o mentação clara, a boa quantia de livros existentes, seus desenvolvimento, mas não possui gerador de códigos excelentes componentes e o aporte de grandes empresas com o CakePHP e sim uma ferramenta para criar a ajudam na sua escolha. estrutura do projeto apenas. São frameworks com obje- A minha opinião? Teste. Instale os frameworks, tivos diferentes, mas que compartilham características desenvolva um projeto em cada um deles e tente fazer em comum. sua escolha. ?>

Elton Luís Minetto Possui graduação e especialização em Ciência de Computação. Professor desde 2004 , trabalha com PHP/MySQL desde 2000 e com Linux desde 1998. Autor do livro Frameworks para Desenvolvimento em PHP, da editora Novatec, e co-autor do livro Grid Computing in Research and Education, publicado pela editora IBM/Redbooks, EUA. Sócio da Coderockr http://www.eltonminetto.net

14 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net

CakePHP Aprenda a instalar e configurar de forma muito fácil. por Cauã Cabral

ão há dúvida de que existem vários frame- Um item que às vezes assusta quem está works disponíveis no mercado, e é fato que começando é o inglês. Graças a comunidade muito Nalguns costumam ganhar destaque em deter- ativa de desenvolvedores no Brasil, temos várias fontes minados períodos. Neste artigo, apresentaremos um de informação em nossa língua pátria. E mais, é pos- destes frameworks de destaque: o CakePHP. sível deixar o CakePHP falando nossa língua, basta uti- Se digo que este é um dos frameworks de lizar um plugin para isso. destaque, quais o fatores que o fizeram ganhar esta no- Do ponto de vista comercial, além de ser um toriedade? Bom, essa é uma questão um tanto subje- framework livre e gratuito, o CakePHP é distribuído tiva, mas vamos tentar... . com um licença flexível, que permite sua integração Começamos pela curva de aprendizado. No com sistemas livres ou proprietários. Ele ainda conta CakePHP ela é bem suave, se o programador já tiver com uma empresa dedicada ao seu desenvolvimento conhecimento de Programação Orientação a Objetos que pode prestar serviço de consultoria e treinamento. (OPP) rapidamente pegara os outros conceitos, du- Além disso tudo é um framework maduro, rante a própria utilização. Exatamente, você vai desco- tendo mais de 6 anos de desenvolvimento e sendo uti- brindo o framework enquanto trabalha com ele. Um lizado em vários sistemas e sites de porte variados. fator determinante para essa facilidade esta na filosofia Talvez você pense: “se o CakePHP é tão fácil “convenção no lugar de configuração”, ou seja, seguin- de usar, por que esse cara não da um exemplo logo?”. do algumas poucas regras básicas para nomear arqui- Pois bem, vamos a um exemplo. vos e classes você tem seu sistema funcional sem gastar tempo com configuração. Como de praxe, imaginemos um cenário co- O CakePHP é um framework especialmente mun entre sistemas, criando uma agenda de contato. projetado para agilizar o desenvolvimento de apli- Para criar nosso primeiro sistema você precisa certifi- cações, trazendo gerador de código - o famoso bake - car-se de três coisas: uma coleção de classes para tarefas rotineiras como au- tenticação, permissionamento, interação com banco de 1. Seu servidor Apache está funcionando com dados, criação de webservices dentre outras. Editando suporte a PHP e o módulo de reescrita está habilitado pouquíssimo código é possível ter uma aplicação com (mod_rewrite) criação, leitura, atualização e remoção de registros, bas- 2. Tenha um banco de dados funcionando, uti- ta seguir as conveções. lizaremos o MySQL, mas com pouquíssimos ajustes. É Outro ponto muito favorável é a abundância possível utilizar outro banco de dados. de fonte de informação, seja através da documentação 3. Possui conhecimento mínimo de terminal/ oficial - composta pelo Cookbook, onde tem-se exem- console para utilizar as “mágicas” de geração de código plos e explicações mais didáticas, e a Api para consulta rápida de funcionalidades - ou ainda diversos sites e Agora precisamos baixar o arquivo do frame- blogs, vários em língua portuguesa com dicas, artigos, work. Acesse o endereço oficial do CakePHP códigos de exemplo e screencasts além de listas de dis- [http://cakephp.org] e faça o download da última versão cussões e canais de IRC. São inúmeros os locais para estável (stable - neste momento, versão 1.3.12). buscar informação e ajuda, com uma comunidade Após fazer o download do arquivo, descom- aberta e muito participativa. pacte-o dentro da pasta pública pro Apache, normal-

16 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net CAPA | CakePHP mente public_html ou htdocs (Figura 1). Apenas para facilitar o acesso, vamos renomear a pasta que foi criada no momento que descompactamos arquivo. Utilizarei o nome phpreview. Acesse a pasta para ver o conteúdo dela, que deve ser algo semelhante ao da Figura 2. Figura 1 Experimente agora acessar a pasta Diretório inicial do CakePHP “phpreview” através do seu servidor local (http://localhost/phpreview). Deve ser exibida uma página de boas vindas do CakePHP (Figura 3) indicando o que falta ser feito para que o framework esteja pronto para o trabalho. As mensagens em amarela são itens que precisam de atenção. As duas primeiras referen-se a constantes usadas para tornar as aplicações mais Figura 2 seguras, podemos remove-las seguindo suas instruções: Diretório renomeado acesse o arquivo core.php dentro da pasta phpreview/ app/config/ e procure a palavra ‘Security.salt’, altere o valor relacionado a ela (você pode inserir qualquer Gerando o Código do Site coisa, seja frases, letras ou números), em seguida busque a palavra ‘Security.cipherSeed’ e altere o valor Terminamos a “configuração”, vamos gerar relacionado - desta vez são aceitos apenasa números, código! Acesse um terminal, caminhe até a pasta nada de letras ou espaços. Salve o arquivo e feche. phpreview/cake/console e execute o comando ./cake O próximo item aponta a falta de configuração bake (repare no ponto antes da barra, ele é necessário para acesso ao banco de dados. O que a mensagem quando estiver usando Linux). diz é “renomeie o arquivo config/database.php.default Primeiro geramos o Model do nosso projeto, para config/database.php”, mas é preciso uma outra teclando M, ele faz o mapeamento do bando de dados coisa. Após renomear o arquivo conforme é pedido, pra aplicação. Ele vai fazer algumas perguntas sobre abra-o em um editor e vá até a linha 76. Este bloco regras de validação e relacionamento com outros permite a configuração da conexão com o banco de modelos. Para este artigo utilizaremos n (não) como dados. Preencha os valores com os dados de acesso ao seu banco. Atualize agora a tela do seu navegador com a página do cake e veja se todas as mensagens em amarelo sumiram. Caso tenha sumido, pode continuar, senão de uma olhada na mensagem e tente seguir o caminho indicado para resolver o problema.

Banco de Dados

Vamos criar agora uma tabela para guardar os registros, para isso, execute o SQL da Listagem 1 no seu gerenciador de banco de dados favorito. Figura 3 Se o servidor estiver correto, esta tela é apresentada

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 17 CakePHP | CAPA

Listagem 1

CREATE TABLE IF NOT EXISTS contatos` ( id INT(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(45) NOT NULL, `endereco` VARCHAR(255) NULL, `telefone` VARCHAR(20) NULL, `celular` VARCHAR(20) NULL, `email` VARCHAR(255) NULL, PRIMARY KEY (`id`) ); Figura 4 Tela final com o cadastro de contatos

resposta para todas elas. A última pergunta pede para revisar as escolhas e confirmar - tecle y (sim) - seu modelo será gerado. Em seguida geramos o Controller (controlador), responsável por gerenciar as ações do usuário, fazendo o meio de campo entre as Views (visão) e o Model (modelo). Responda n para todas as opções exceto a opção “Would you like to create some basic class methods” e a confirmação final. O primeiro sim é para Após o fechamento dizer ao CakePHP para criar nossas ações básicas no desta edição foi controlador, a segunda é para permitir a escrita do lançada a versão 2.0 arquivo. do Cake PHP, que Por último, geramos as Views (visão, nossas está disponível em telas), neste caso siga apenas as opções padrões (aperte http://github. enter sem inserir letras). Ao final você terá os arquivos com/cakephp/ mostrados na Figura 5. cakephp/tree/2.0 Tendo tudo corrido bem, você já pode acessar sua aplicação de agenda pelo endereço http://localhost/ phpreview/contatos (Figura 4). Lá você poderá ver a lista de contatos criados, adicionar, editar e excluir registros de contatos além de visualizar os dados completos de cada um individualmente. Este é um exemplo básico do poder de automatização de tarefas que o CakePHP proporciona. Espero que o artigo tenha despertado curiosidade em você para conhecer um pouco mais deste fantástico framework. ?>

Cauã Cabral Começou a se interessar por computação (e não computador) aos 12 anos, quando frequentava os canais de IRC. É Bacharel em Figura 5 Ciências da Computação pela UFMS, onde aprendeu fundamentos Arvore com os arquivos criados após a e linguagens de programação, como C/C++, e Assembly.Hoje execução do BAKE é sócio da Radig – Soluções em TI, onde dedica seus esforços no desenvolvimento baseado na web, utilizando a ferramenta que me- lhor lhe servir.

18 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net

Web Enterprise com Zend Framework É possível construir uma aplicação robusta usando ZF? por Adler Medrado

desenvolvimento web está cada vez mais jetos, ele é baseado em componentes que são o mín- dinâmico e atualmente é inviável uma equipe imo possível dependentes entre si, ou seja, possuem O de desenvolvimento utilizar o seu framework baixo acoplamento, permitindo que sejam utilizados caseiro para atender as necessidades de suas empresas somente os componentes que realmente sejam impor- e/ou clientes. tantes no desenvolvimento de uma aplicação. Neste artigo serão abordados alguns pontos Todos os componentes possuem testes unitári- que demonstram porque se deve utilizar um frame- os, o que diminui as chances de que sejam liberadas work para desenvolvimento web, neste caso, utilizando releases com componentes defeituosos, claro, nada é a linguagem PHP e o Zend Framework. 100% livre de bugs mas o fato de todo o framework ser exaustivamente testado diminui e muito as chances de componentes irem com erros para uma nova release. O que é um framework A licença utilizada pelo Zend Framework é ba- seada na New BSD o que garante aos seus usuários total liberdade com seus códigos no que diz respeito a Um Framework é um conjunto de funcionali- copyleft. dades comuns a várias aplicações que visam facilitar o desenvolvimento de software, permitindo assim que a equipe de desenvolvimento preocupe-se com as re- Model, View, Controller gras de negócios especificas da aplicação ao invés de se preocuparem com a infra-estrutura o que aumenta a produtividade, pois há um reuso maior de código e A estrutura implementada pelo framework também aumenta a qualidade pois todo framework é baseada no MVC ou seja, as camadas de Modelo, possui um padrão de desenvolvimento que deve ser Visão e Controle são distintas. seguido pela equipe, o que por sua vez facilita a ma- A camada de modelo, dentre as várias classes nutenção da aplicação. que a compõe, implementa dois padrões interessantes: Table_Data_Gateway e o Row_Data_Gateway que fa- cilitam muito o trabalho relacionado à manipulação de O Zend Framework tabelas e resultsets. Os códigos abaixo demonstram esta funcionali- dade: Criado e mantido pela empresa Zend Technologies (criadora do ) em conjunto class Pessoa extends Zend_Db_Table_Abstract com uma extensa comunidade de desenvolvedores ao { redor do mundo, o Zend Framework é um framework } para desenvolvimento PHP projetado com base nas No código acima nós definimos uma classe práticas de desenvolvimento orientado a objetos. chamada Pessoa que por sua vez representa uma tabela Escrito em PHP 5 e totalmente orientado a ob-

20 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net CAPA | Web Enterprise com Zend Framework no banco de dados também denominada Pessoa. Listagem 1 $pessoa = new Pessoa(); $pessoa = $pessoa->fetchAll(); //Inserir $pessoa->insert(array(‘nome’ => Acima, após criar uma instância da classe Pes- ‘Adler Medrado’)); soa, nós podemos manipular os dados desta tabela. $dados = array(‘nome’ => Neste caso, estamos recuperando todos os registros ‘Adler Brediks Medrado’); gravados. Na Listagem 1 estão os exemplos para in- $where = ‘id = 1’; serir, alterar e excluir um registro. Obviamente o componente provém muito // Alterar mais recursos, este foi somente um pequeno exemplo. $pessoa->update($dados, $where); Controllers e Views são tão simples quanto o model, bastando apenas criar uma instancia da // Excluir $pessoa->delete($where); classe Zend_View para obter um objeto de visão o que já é feito automaticamente pelo framework, en- tão, na prática não é necessário criar uma instancia desta classe explicitamente e o controller por sua vez, basta criar uma classe que faça a herança da classe . Zend_Controller_Action provê o componente Zend_Cache que nos permite gerar e manter cache em diversas fontes como arquivos texto, memcache, APC, entre outros. Realmente, man- Mashup e Syndication ter caches com Zend Framework é uma tarefa muito simples.

Atualmente é comum integrar sistemas e web- sites com serviços de terceiros como Google maps, Componentes Diversos Google docs, flickr e twitter e quem já implementou e conhece as APIs destes serviços provavelmente con- cordará comigo que apesar de existirem as APIs, nem Todo o conteúdo de entrada deve ser filtrado, sempre é trivial a implementação de certas integrações, isso é uma premissa básica de segurança no desenvolvi- pensando nisso, o framework possui componentes di- mento web e para isso o Zend Framework provém fil- versos para integração com serviços do Google, Yahoo, tros, validadores prontos e meios muito simples de se Twitter, entre outros, bem como componentes que criar filtros e validadores personalizados permitem manipulações simples de documentos RSS O Zend Framework possui também compo- e congêneres. nentes para envio de email, gerar documentos PDF, Indexação de documentos e busca com Zend_Search_ Lucene que é uma implementação em PHP do famoso Caching Apache Lucene. Implementar sistemas que necessitam supor- tar vários idiomas é simples com os componentes de Fazer cache, em muitos casos aumenta a per- I18N e L10N que por sua vez suportar diversas formas formance de nossas aplicações mas implementar este de armazenamento e consulta dos dicionários de idio- tipo de funcionalidade do início nem sempre é uma mas. tarefa simples. Implementar WebService com Zend Frame- Para facilitar o trabalho o Zend Framework work é muito simples, seja com SOAP, XML-RPC ou

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 21 Web Enterpriae com Zend Framework | CAPA

REST utilizando os componentes existentes. Zend Framework foi Integração com outras bibliotecas projetado com base nas boas práticas de É possível implementar aplicações “Web 2.0” escrevendo todo o código AJAX sem o intermédio de desenvolvimento nenhum framework porém esta é uma tarefa Hercúlea que exige muito tempo disponível e tempo atualmente é algo bastante escasso. Dessa forma, é comum utilizar frameworks javascript como JQuery ou Dojo para fazer todo o tra- perficialmente as funcionalidades que o Zend Frame- balho difícil e neste ponto a integração do Zend Frame- work pode oferecer no desenvolvimento de aplicações work com estas ferramentas é muito boa e permite que web. o desenvolvedor escreva mais código PHP do que Espero que você tenha aproveitado, e quem Javascript para obter o mesmo resultado; Estou falando sabe, em uma oportunidade futura possamos publicar dos componentes Zend_Dojo e ZendX_JQuery que já um tutorial prático de como usar esta ferramenta. possuem uma integração muito madura com esses dois Um abraço e até a próxima. ?> frameworks javascript que estão entre os mais utiliza- dos atualmente. O Zend_View provém mecanismos simples para a separação das camadas, neste caso, a camada Adler Medrado de visão mas, caso você já tenha uma boa experiên- É consultor em uma empresa privada com sede em Curitiba e es- critórios em outras unidades da federação; É especializado em de- cia com a biblioteca Smarty você pode configurar o senvolvimento web, treinamento e segurança e também é instru- Zend Framework para utilizar o Smarty na camada de tor de PHP de todos os níveis, com mais de 2000 horas dentro de visão e o mesmo conceito nós podemos aplicar para sala de aula. O autor possui as certificações Zend Certified Engi- neer - PHP 5 e Zend Certified Engineer – Zend Framework sendo o a camada de modelo, pois, se por algum motivo for primeiro latino-americano a certificar-se nesta última. necessário usar o Doctrine que é o mais conhecido, senão, o único ORM escrito em PHP como camada de abstração de banco de dados, você pode configurar o Zend Framework para utilizá-lo como padrão. Existe hoje um trabalho para tornar mais simples a integração do Doctrine com o Zend Framework. No mercado de RIA, a Adobe é imbatível com o seu Adobe Flex., isso é um fato e contra fatos não há argumentos, desta forma, a Adobe em parceria com a Zend implementou um componente chamado Zend_ Amf que permite uma integração simples e transpa- rente do Zend Framework com o Flex substituindo a camada de visão padrão do framework pelas interfaces geradas pelo Adobe Flex.

Considerações Finais

Este artigo tinha por objetivo demonstrar su-

22 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net Kohana Framework Você também deveria usá-lo! por Daniel Costa

esenvolvedores PHP geralmente já tem al- controles da aplicação no lado do cliente (nessa cama- guma posição em relação a frameworks: ou da estão o HTML, CSS, JavaScript...). Dsão totalmente contra pois acham que eles diminuem performance, aumentam complexidade e - Controllers: amarrações etc; ou são a favor de algum específico com As classes que estão no comando da aplicação, o qual trabalham diariamente, e os demais são ignora- são as responsáveis por exibir as views e gerenciar de dos. Nesta edição venho apresentar o Kohana Frame- volta as requisições das views para os models, e deles work, tanto para quem não usa nenhum - e você verá de volta para as views (os guardas de trânsito do sis- que ele pode te ajudar muito daqui pra frente - quanto tema). para quem já é adepto de algum outro framework e ainda não descobriu uma opção bacana. O Kohana é um framework baseado no já conhecido Code Igniter e nasceu pela necessidade Mas porque usar o Kohana? de desenvolver usando PHP 5 totalmente orientado a objetos (o Code Igniter até bem pouco tempo funcio- nava tranquilamente em PHP 4, então não era exata- PHP é uma linguagem muito, muito fácil de se mente OO). E foi pensando nisso que ele foi escrito, programar, este é um dos motivos por ser tão adotado baseando-se em algumas excelentes idéias do CI, como em ambiente web. Esta facilidade e a curva de aprendi- modularização e hierarquia de componentes, porém zado tem atraído muitos desenvolvedores ao longo dos aproveitando-se de tudo que o PHP 5 tem a oferecer. últimos anos. Mas o PHP tem dois pequenos proble- Além disso, ele também já vem com uma série de clas- mas. Muitos desenvolvedores experientes ainda resis- ses auxiliares que resolvem a maioria dos problemas tem à linguagem devido suas limitações na Orientação comuns no desenvolvimento web. a Objetos, e a quantidade de código ruim que se en- Como se espera de qualquer bom framework contra por aí é enorme. Mas com o Kohana qualquer atual, o Kohana utiliza arquitetura MVC (Model-View desenvolvedor PHP, do iniciante ao mais experiente, -Controller), que ajuda o desenvolvedor a escrever seus terá que escrever seus códigos seguindo um mínimo de códigos em 3 camadas distintas que são: padrão exigido pela arquitetura dele. O Kohana preenche esse abismo entre os ini- - Models: ciantes e designers que gostam do PHP por causa da As classes que manipulam fontes de dados e os facilidade, e os avançados que escrevem tudo orien- dados propriamente dito (que fique bem claro que não tado a objetos e nada menos que isso. O framework estamos falando necessariamente de banco de dados, também estimula a adoção de engenharia de software qualquer fonte de dados entra aqui). e deixa isso mais próximo dos desenvolvedores PHP, por exemplo, com o uso de patterns como Singleton e - Views: Factory, pra citar apenas dois. Os arquivos de interface com os usuários e os O maior motivo porque você deve começar a

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 23 Kohana Framework | CAPA

usar o Kohana é esse: você vai passar a desenvolver - MVC: código mais padronizado e seguir as melhores práticas outra sigla que você tá cansado de conhecer, de desenvolvimento, o que é essencial quando você tra- mas é bom reforçar que com MVC você mantém seu balha com equipes de iniciantes a avançados comparti- código organizado, facilitando a vida da sua equipe. lhando e mantendo código constantemente. Você pode pegar qualquer sistema feito com o Kohana e facilmente entender o que cada trecho de código faz simplesmente porque tem um fluxo que precisa ser res- Características do framework peitado: do controller pra uma view ou pra um model que por sua vez retorna pra uma view.

- Orientação a Objetos: - URLs amigáveis: é um paradigma padrão de mercado e o Koha- cada requisição aponta para um controller e na ajuda a consolidar isso no PHP, o que te torna um um método (as actions de um controller), no estilo desenvolvedor que segue os padrões da indústria de site/controller/action/pa/ra/me/tros. Por software e apto para atuar com PHP tanto no mercado exemplo, para chamar o controller blog que exibe o corporativo quanto no de aplicações web. artigo número 3, a URL será algo como [1], o que é muito fácil para mapear a aplicação e ótimo para os - Template: motores de busca. assim como outros vários frameworks, tem um suporte a templates muito fácil de usar. De forma muito - Libraries, Helpers e classes de terceiros: simples, basta você criar uma view chamada template. no pacote padrão do Kohana você já recebe inúmeras classes com funcionalidades que a maioria php, colocar duas variáveis - $title e $content - para indicar onde vão o título e o conteúdo da página e você das aplicações web precisam. Por exemplo, para vali- já tem um template rodando. E dá pra fazer muita coisa dar qualquer coisa basta usar a classe Validate. Há inú- personalizada e bacana com templates no Kohana. meras outras classes e descobrí-las vai tornar sua vida de desenvolvedor muito mais produtiva. - Internacionalização: suporta de uma forma absurdamente simples a internacionalização do seu sistema. Basicamente é Iniciando de verdade, agora preciso criar um arquivo pra cada idioma, e definir no objeto de internacionalizaçao qual idioma se quer usar. Mude essa configuração e ele adota o novo idioma au- Pra começar a desenvolver com o Kohana é tão tomaticamente. Também dá pra aproveitar bastante simples quanto os passos abaixo: essa funcionalidade. 1. Baixe o pacote estável mais recente no site - ORM: http://www.kohanaframework.org e descompacte o do inglês Object-Relational Mapping, é um con- conteúdo no diretório público do seu servidor. ceito onde seu código manipula diretamente as tabelas de um banco como objetos, enquanto todo o SQL 2. Configure a URL principal da aplicação de acordo é gerado pra você nos bastidores. No Kohana é tão com onde está hospedado (se na raíz ou num subdi- simples de usar que basta que seus models estendam a retório), no arquivo application/bootstrap.php na classe ORM que passará a manipular todo seu banco linha onde tem: de dados sem precisar escrever uma única query. Ele é robusto e muito estável, não sinto nenhuma necessi- Kohana::init(array(‘baseurl’ => ‘/’)); dade de acoplar um ORM externo nas minhas apli- cações. 3. Teste se sua instalação está OK acessando a URL

24 PHPReview | 4ª edição |novembro-dezembro/2011 | www.phpreview.net CAPA | Kohana Framework onde você descompactou o framework. Se 3. View aparecer algum alerta em vermelho você precisa verificar os requisitos sugeridos, mas se tudo está OK você vai ver uma tela de resultado verde e É um arquivo PHP que pode em- seu framework já está pronto pra ser usado! butir HTML, CSS e JavaScript. Vamos criar no diretório application/views o arquivo contact.php com o código html do formulário. Desenvolvendo um simples formu- Quando você acessa a sua URL lário com validação dos campos. [2], essa view é chamada pelo método contact do controller site e exibe o formulário de con- tato, ao preencher e enviar os campos o método Agora que sua instalação está pronta, va- do controlador irá agora validar de acordo com mos fazer um simples formulário de contato pra as regras definidas e exibir mensagem de erro você entender o fluxo do framework. Criaremos quando necessário. um template, um controller que estende esse template, e uma view para o formulário.

Os arquivos dos Conclusão exemplos usados neste artigo podem 1. Template ser baixados em: Você pôde ver como é fácil desenvolver https://github.com/ phpreview/edicao-4 sistemas web com o Kohana, acredite: é possí- Assumimos que você já tem um layout pro seu vel manter sistemas de qualquer porte com ele. sistema, se não tiver, crie um layout simples só Você também viu como ele facilita sua vida com com as áreas do título e do conteúdo da página. as classes já disponíveis como a Validate do nos- Pronto? Pegue o HTML do seu layout e crie so exemplo. Há muito mais para se descobrir, comece hoje mesmo! um arquivo chamado template.php dentro do ?> diretório application/views. Nesse arquivo, edite as áreas do título e do conteúdo colocando os códigos abaixo:

Lista de URLs - para o título (header, topo da página): [1] http://seusite.com/blog/exibirArtigo/3 [2] http://seuservidor/blog/index.php/site/contact

- para o conteúdo: Daniel Costa Brasileiro, 20 anos de praia + 5 de cerrado + morando em 2. Controller sampa desde julho/2008, analista desenvolvedor de pro- jetos web e trabalhando com TI e Telecom desde 2002. Bacharel em Ciência da Computação, pós-graduado em Engenharia de Software, tenho experiência em desen- É uma classe simples em PHP volvimento e manutenção de sites e sistemas web há mais com nome situada no diretório de 10 anos, com conhecimentos em HTML/XHTML, CSS, site.php JavaScript/DOM/AJAX, PHP, ASP, , JSP, MySQL, SQL application/classes/controller. Server e Oracle.

PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 25 Artigo

Autenticação com CodeIgniter Criando uma biblioteca para controle de acesso por usuário aplicada a classes e métodos com o CodeIgniter. por Ademir Cristiano Gabardo

s aplicações PHP estão se tornando checarmos “onde estamos”, ou seja, em que mais complexas a cada dia. Aplicações classe e em que método. Ade uso comercial, acadêmico e das mais Para verificar o nome da classe utilize a diversas finalidades exigem um controle mais seguinte linha de código: apurado de acesso. No CodeIgniter, obrigatoriamente, es- $this->router->class tamos sempre acessando uma classe e um mé- todo de um controlador. Desta forma é possível E para recuperar o nome do método utilize: mapear todas as possíveis ações e/ou caminhos disponíveis em uma aplicação e adicionar o con- $this->router->method trole de acesso aos métodos que desejamos con- Desta forma, podemos passar para a biblioteca o trolar. Os arquivos dos exemplos usados caminho completo de onde estamos da seguinte Desenvolvi uma biblioteca (librarie) para neste artigo podem forma: controlar o acesso dos usuários; o funcionamento ser baixados em: é o seguinte. Em uma tabela no banco de dados https://github.com/ phpreview/edicao-4 $this->auth->check_logged( (sys_metodos) ficam guardados os nomes de $this->router->class , classe e métodos, mapeando todos os possíveis $this->router->method); caminhos, e em outra (sys_permissoes) ficam Sendo auth o nome da biblioteca e as ids dos usuários com os respectivos métodos check_logged o método que estamos acessando a que eles têm acesso. Esta segunda tabela está na biblioteca. Como esta biblioteca estará sendo relacionada a tabela de cadastro de usuários acessada em muitas classes e métodos é preferív- (tb_usuarios) (Figura 1). el carregar no autoload para que ela esteja sem- Seria bastante trabalhoso ter que popu- pre disponível em qualquer parte da aplicação. lar a tabela de métodos manualmente, ou criar Para proteger um método, basta incluir a um Admin para ela, desta forma, foi incluída linha de código conforme mostrado na primeira uma rotina na própria biblioteca para que, quan- linha do método, da seguinte forma: do um método invocado por ela não for encon- trado na tabela sys_metodos, ele seja automat- auth->check_logged( adicionar ou remover as permissões dos usuári- $this->router->class , os. $this->router->method); O CodeIgniter provê uma maneira de } }?>

26 PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net ARTIGO | Autenticação com CodeIgniter

Vejamos então como fica o código fonte da bi- blioteca. Salve o código-fonte a seguir com o nome de Listagem 1 arquivo auth.php na pasta system/application/libraries: Note que a biblioteca se encarrega de inserir auth-> check_menu(‘home’,’index’) == 1) cadastrados na tabela sys_metodos. { Quando um usuário tentar acessar uma área do echo “

  • Home
  • ”; } ?> redirect( base_url().’home/sempermissao’, ‘refresh’ ); E quando ele não estiver logado será redirecio- nado para a página de login.

    redirect( base_url().’home/login’,‘refresh’ );

    Incluí também um método na biblioteca para Figura 1 checar se o usuário logado no sistema tem permissão Estrutura de tabela. para acessar um determinado método de uma classe chamado check_menu. Com isso, concluímos nosso sistema de autenti- Para utilizar a autenticação no menu, basta che- cação com controle de nível de acesso por classe e método. car se o usuário tem permissão para o caminho. Isto Não é exatamente a coisa mais simples do mundo, mas tam- pode ser feito diretamente na view do menu com o bém não é a mais complicada. É importante resaltar que estou guardando as sessões do codeIgniter no banco de da- código da Listagem 1. dos. O cadastro de usuário e as funções de administração Observe também que na tabela sys_metodos das permissões de usuários na tabela de permissão devem existe um campo chamado privado que tem por ob- ser construídas separadamente. jetivo liberar o acesso de métodos que estejam prote- Implementações futuras estão previstas, e um inconveniente gidos. Caso você construa um sistema de admin para deste sistema é que quando você altera um nome de classe gerenciar esta tabela, quando um método está com o ou método, é necessário ajustar a tabela sys_metodos. campo privado definido como 1, significa que ele está É isso aí. Espero ter ajudado a entender um com seu acesso restrito somente a usuários com per- pouco mais sobre o CodeIgniter e como fazer autenti- missão de acesso, e quando está ajustado como 0, que cação de usuário. está liberado como método público. Até mais! ?> Outro detalhe desta tabela é um “apelido”, ele é cadastrado num primeiro momento como classe/ método, mas poderá ser alterado para qualquer nome amigável e compreensivel para os usuários. Como Ademir Gabardo Autor, Professor e Instrutor, Desenvolvedor web, entusiasta PHP e por exemplo: Home/login poderia ser substituído por de software livre. Atualmente desenvolvendo sistemas baseados Acesso a tela de login. em PHP e MySQL com apoio em frameworks MVC e orientação Para autenticar um usuário no sistema, crie um a objetos. Também ministra cursos nas áreas de Software livre, BrOffice.org e plataforma MS Office. Objetivando lecionar discipli- formulário com os campos: usuario, cnpj e senha e nas correlatas em curso superior e continuar desenvolvendo siste- aponte para uma classe de sua preferência (eu uso a mas de Internet e Intranet. classe de nome home) com os seguintes métodos:

    PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 27 Mão na Massa

    E-mail fácil com PHP Mailer Aprenda a enviar e-mail com PHPMailer e Smarty templates por Beto Lima

    lá para todos, é com imenso prazer que e a função de envio de e-mail, vamos criar agora estou aqui pra dar minha contribuição. o nosso arquivo de entrada index.php que se OO PHPMailer é uma classe para envio parece com a Listagem 1 de e-mails através do PHP via conexão SMTP O arquivo de template vai ser algo mais ou POP3. Ele é distribuído de acordo com o ou menos assim: GNU Lesser General Public License (LGPL), muito usada em sistemas e sites por aí a fora.

    Olá %%Nome%%

    Uma das vantagens de usar o phpmailer

    Você está recebendo email de teste é poder enviar e-mails autenticados por smtp, já na caixa %%Email%%.

    que a função mail interna do php não é possível. O que estiver dentro daqueles sinais de Bom, vamos direto ao assunto: para porcentagens duplas serão substituídos pelo seu mais detalhes sobre o PHPMailer visite o site do nome e seu email. projeto (http://phpmailer.worxware.com/). Os arquivos dos exemplos usados Até a próxima. Primeiro temos uma função que defini neste artigo podem ser baixados em: com o nome de envia_email. Esta função in- Listagem 1 clui uma classe de template que por vez estende https://github.com/ phpreview/edicao-4 a classe phpmailer. “EMAIL_TEMPLATE1”, tamente, criei uma classe chamada Template- “Email”=> “[email protected]”, “Nome”=> “Seu Nome”)); Mail que estende a classe do PHPMailer e ?> contém todos os parâmetros para o envio do e-mail, como servidor SMTP, usuário, senha Roberto S. Lima e outros. Esta classe pode ser vista no arquivo É natural de Esteio – RS e trabalha com programação web há 4 anos, usando linguagens HTML, CSS, JAVASCRIPT, PHP, POST- TemplateMail.class.php. GRESQL, MYSQL. Atualmente, trabalho em projetos de Sistemas Uma vez que tenho esta classe definida Web usando HTML5, PHP5, e PostgreSQL 9.

    28 PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net Dicas Livros

    Gerenciamento de código-fonte HTML5 é a linguagem Você gerencia o seu código-fonte? Se não faz, então você pode de marcação que amplia de forma sur- conhecer os projetos Google Code e o Github. Através destes dois preendente as fun- servidores você poderá manter o código fonte da sua aplicação cionalidades da HTML, guardado em um servidor independente. Assim, as chances de você alterando de maneira perder um trabalho é quase nula. significativa como você desenvolve para a web. Trata-se da mais extensa especificação User Groups para a HTML focada em criar funcionalidades Uma forma muito rápida de receber suporte para as suas dúvidas para desenvolvimento não só de sites, mas é fazer parte dos vários grupos de usuários espalhados por todo o também de aplicações de internet rica (RIA). A linguagem possibilita criar um código to- mundo. Existem grupos relacionados a linguagens de programação, talmente semântico empregando os novos como PHP, .Net, grupos de sistemas específicos, como Smarty, elementos da linguagem. Jquery, Ajax entre outros. Você pode procurar no Google Groups quanto no Yahoo grupos. Editora: Novatec Preço: R$ 73,00 Comprar Online HTML5 Se você não gosta de mexer com HTML então está na hora de Estudo prático e didáti- aprender. O HTML 5 está aí e quem conhece a fundo o seu funcion- co é fornecido neste amento está anos-luz a frente dos concorrentes. Aproveite, estude livro, que traz os prin- e saia na frente na hora de buscar uma posição melhor no mercado. cipais conceitos sobre manipulação de dados com a linguagem SQL (T-SQL), por meio de Slideshare exemplos fáceis, expli- Este site reúne apresentações de palestras de todos os grandes cações diretas e exer- eventos, congressos e foruns do mundo. É possível, por exemplo, cícios para fixação do conteúdo. Apresenta uma breve introdução ver todas as plestras do ZendCon 2010, ou das palestras do PHP ao banco de dados relacional, comandos Conference BR 2010 no mesmo site. A busca pode ser feita por tre- DDL (estrutura do BD) e DML para preench- cho da palestra ou por tags colocadas pelo próprio palestrante. er tabelas, views (visões), comandos de con- sulta e outros relacionados à programação de scripts e detalhes sobre instalação. Para a execução dos scripts abordados, foi utilizado o gerenciador de banco de dados relacional Microsoft SQL Server 2008 R2 Ex- press.

    Editora: Érica Preço: R$ 56,00 envie sua dica Comprar Online [email protected]

    PHPReview | 4ª edição | novembro-dezembro/2011 | www.phpreview.net 29 Humor http://www.vidadeprogramador.com.br