Cake Php

43
CakePHP 26 de Setembro de 2008

description

Centro de Difusão de Tecnologia e Conhecimento

Transcript of Cake Php

Page 1: Cake Php

CakePHP

26 de Setembro de 2008

Page 2: Cake Php

Conteúdo

I Sobre essa apostila 2

II Informações Básicas 4

III GNU Free Documentation License 9

IV CakePHP 18

1 O que é o curso CakePHP 19

2 Plano de ensino 202.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Introdução 233.1 Início . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1.1 Extensões do Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.2 Extensões de Visão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.3 Extensões de Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2 Estrutura CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.2.1 Extensões de Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.2 Extensões de Visão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.3 Extensões de Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 MVC 264.1 MVC Início . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.1.1 Descrição do Padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.1.2 Frameworks MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1

Page 3: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

5 Estruturas e Convenções 295.1 Estrutura de arquivos do CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

5.1.1 Estrutura do diretório App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295.2 Convenções no CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

5.2.1 Convenções de arquivos e nome de classes . . . . . . . . . . . . . . . . . . 315.2.2 Convenções de modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.2.3 Convenções de controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315.2.4 Convenções de visão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

6 Instalação 336.1 Requisitos necessários para instalação do CakePHP . . . . . . . . . . . . . . . . . . 33

6.1.1 Preparando para instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336.2 Instalação avançada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.2.1 Caminhos adicionais para classes . . . . . . . . . . . . . . . . . . . . . . . . 366.2.2 Apache e mod_rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366.2.3 Comece agora! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7 Configuração 387.1 Configuração da Base de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.1.1 Exemplo de configuração da base de dados . . . . . . . . . . . . . . . . . . 387.1.2 Chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.2 Configurações de Rotas (Routes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397.2.1 Alguns exemplos para a rota padrão . . . . . . . . . . . . . . . . . . . . . . . 40

7.3 Inflexões personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407.3.1 Variáveis do inflections.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2

Page 4: Cake Php

Parte I

Sobre essa apostila

3

Page 5: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

Conteúdo

O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.

O formato original deste material bem como sua atualização está disponível dentro da licençaGNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção demesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC ([email protected]), desde outubrode 2006. Criticas e sugestões construtivas são bem-vindas a qualquer tempo.

Autores

A autoria deste conteúdo, atividades e avaliações é de responsabilidade de Diego de AquinoSoares ([email protected]).

O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vemsendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjuntocom as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiandoinclusive a comunidade Free Software junto a outras entidades no país.

Informações adicionais podem ser obtidas atréves do email [email protected], ou dahome page da entidade, através da URL http://www.cdtc.org.br .

Garantias

O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizamdireta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença

Copyright ©2006,Diego de Aquino Soares ([email protected]).

Permission is granted to copy, distribute and/or modify this document under the termsof the GNU Free Documentation License, Version 1.1 or any later version published bythe Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-TILA. A copy of the license is included in the section entitled GNU Free DocumentationLicense.

4

Page 6: Cake Php

Parte II

Informações Básicas

5

Page 7: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito dodesenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário ede código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre osservidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercadonacional a adotar novos modelos de negócio da tecnologia da informação e de novos negóciosde comunicação com base em software não-proprietário e de código fonte aberto, oferecendotreinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar comoincentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe-recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento deprodutos de software não proprietários e de seu código fonte livre, articulando redes de terceiros(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comeceseu curso. São elas:

• Licenças para cópia de material disponível

• Os 10 mandamentos do aluno de Educação a Distância

• Como participar dos fóruns e da wikipédia

• Primeiros passos

É muito importante que você entre em contato com TODAS estas informações, seguindo oroteiro acima.

Licença

Copyright ©2006, Diego de Aquino Soares ([email protected]).

6

Page 8: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termosda Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posteriorpublicada pela Free Software Foundation; com o Capítulo Invariante SOBRE ESSAAPOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso a Internet: ter endereço eletrônico, um provedor e um equipamento adequado épré-requisito para a participação nos cursos a distância.

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-tica é necessário para poder executar as tarefas.

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,dos colegas e dos professores.

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seuscolegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisãoe a sua recuperação de materiais.

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações erealizá-las em tempo real.

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre.

• 8. Flexibilidade e adaptação: requisitos necessário a mudança tecnológica, aprendizagense descobertas.

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente éponto-chave na comunicação pela Internet.

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual nãocontrola a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informaçõesque sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

7

Page 9: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação queinteresse ao grupo, favor postá-la aqui.Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico docurso, é recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos maisefetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativopara solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadasa todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podemajudar.Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com aformalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópicoé recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podemser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece umótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, porpessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar dasferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivosvalores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita asidéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

8

Page 10: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutorou instrutor:

• fornece explicações claras acerca do que ele espera, e do estilo de classificação que iráutilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com umreparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, deameaça e de nervosismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

9

Page 11: Cake Php

Parte III

GNU Free Documentation License

10

Page 12: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)Esta é uma tradução não oficial da Licençaa de Documentação Livre GNU em Português

Brasileiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a dis-tribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso.Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhora GFDL.

This is an unofficial translation of the GNU General Documentation License into Brazilian Por-tuguese. It was not published by the Free Software Foundation, and does not legally state thedistribution terms for software that uses the GFDL–only the original English text of the GFDL doesthat. However, we hope that this translation will help Portuguese speakers understand the GFDLbetter.

Licença de Documentação Livre GNU Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, masnão é permitido alterá-lo.

INTRODUÇÃO

O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"nosentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantémpara o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsávelpelas modificações feitas por terceiros.

Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações dodocumento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-ral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, por que softwarelivre precisa de documentação livre: um programa livre deve ser acompanhado de manuais queprovenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita amanuais de software; ela pode ser usada para qualquer trabalho em texto, independentementedo assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-cipalmente para trabalhos cujo propósito seja de introdução ou referência.

APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelodetentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.

11

Page 13: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é umlicenciado e é referida como "você".

Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documentoou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outralíngua.

Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-clusivamente da relação dos editores ou dos autores do Documento com o assunto geral doDocumento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamentenesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, aSeção Secundária pode não explicar nada de matemática).

Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.

As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, comosendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.

Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de CapaFrontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.

Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-mente, representada num formato cuja especificação esteja disponível ao público geral, cujosconteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editoresde texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível deservir como entrada a formatadores de texto ou para tradução automática para uma variedadede formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formatode arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é"Transparente"é chamada de "Opaca".

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XMLusando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, eprojetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatosproprietários que podem ser lidos e editados apenas com processadores de texto proprietários,SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejamdisponíveis para o público, e HTML gerado automaticamente por alguns editores de texto comfinalidade apenas de saída.

A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,o material que esta Licença requer que apareça na página do título. Para trabalhos que nãotenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-minente do título do trabalho, precedendo o início do corpo do texto.

12

Page 14: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

FAZENDO CÓPIAS EXATAS

Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou nãocomercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que estaLicença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-cente nenhuma outra condição, quaisquer que sejam, às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção decópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,você também precisa respeitar as condições da seção 3.

Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e tambémpode exibir cópias publicamente.

FAZENDO CÓPIAS EM QUANTIDADE

Se você publicar cópias do Documento em número maior que 100, e a nota de licença doDocumento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clarae legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, eTextos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara elegivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o titulo com-pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionaroutros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estaspreservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópiaexata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de formalegível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capaverdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, vocêprecisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópiaOpaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparentecompleta do Documento acessível publicamente em uma rede de computadores, a qual o públicousuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos deprotocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurarque esta cópia Transparente vai permanecer acessível desta forma na localização especificadapor pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-mente ou através de seus agentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes deredistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover vocêcom uma versão atualizada do Documento.

13

Page 15: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuiçãoe modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Alémdisso, você precisa fazer o seguinte na versão modificada:

A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listadosna seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior seo editor original daquela versão lhe der permissão;

B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cincodos autores principais do Documento (todos os seus autores principais, se ele tiver menos quecinco);

C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;

D. Preservar todas as notas de copyright do Documento;

E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente àsoutras notas de copyright;

F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao públicoo direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópicoabaixo;

G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos deCapa requeridos dados na nota de licença do Documento;

H. Incluir uma cópia inalterada desta Licença;

I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendopelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página deTítulo. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo otítulo, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionarum item descrevendo a Versão Modificada, tal como descrito na sentença anterior;

J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a umacópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicadopelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refirader sua permissão;

K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da

14

Page 16: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-buidores e/ou dedicatórias dados;

L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou emseus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;

M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na VersãoModificada;

N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outrotítulo dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem comoSeções Secundárias e não contenham nenhum material copiado do Documento, você pode optarpor designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seustítulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-sam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - porexemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como adefinição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textosde Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma deTexto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente porvocê ou por acordo feito com alguma entidade para a qual você esteja agindo, você não podeadicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior queadicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seusnomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquerVersão Modificada.

COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sobos termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e listetodas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções InvariantesIdênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houvermúltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de

15

Page 17: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editororigianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajustenos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combinequaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas asseções entituladas como "Endosso".

COLETÂNEAS DE DOCUMENTOS

Você pode fazer uma coletânea consitindo do Documento e outros documentos publicadossob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos comuma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópiaexata de cada um dos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sobesta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga estaLicença em todos os outros aspectos relacionados à cópia exata daquele documento.

AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pelacompilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outrostrabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assimcompilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capado Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.Senão eles precisarão aparecer nas capas de todo o agregado.

TRADUÇÃO

Tradução é considerada como um tipo de modificação, então você pode distribuir traduçõesdo Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduçõesrequer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluirtraduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessasSeções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a

16

Page 18: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.

TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitossob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob estaLicença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em totalacordo com esta Licença.

REVISÕES FUTURAS DESTA LICENÇA

A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versãopresente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Vejahttp://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificarque uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, vocêtem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versãoposterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se oDocumento não especificar um número de Versão desta Licença, você pode escolher qualquerversão já publicada (não como rascunho) pela Free Software Foundation.

ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licençano documento e ponha as seguintes notas de copyright e licenças logo após a página de título:

Copyright (c) ANO SEU NOME.É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licençade Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos daCapa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".

Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés dedizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos deCapa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para osTextos da Quarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,

17

Page 19: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18

Page 20: Cake Php

Parte IV

CakePHP

19

Page 21: Cake Php

Capítulo 1

O que é o curso CakePHP

CakePHP é um framework escrito em PHP que tem como principais objetivos oferecer umaestrutura que possibilite aos programadores de PHP de todos os níveis desenvolverem aplicaçõesrobustas rapidamente, sem perder flexibilidade.

O CakePHP é baseado no framework Ruby on Rails e utiliza padrões de projeto conheci-dos, tais como ActiveRecord, Association Data Mapping, Front Controller e MVC (Model-View-Controller).

Esse curso ensinará como instalar e configurar corretamente o CakePHP para que você possacriar seus aplicativos.

20

Page 22: Cake Php

Capítulo 2

Plano de ensino

2.1 Objetivo

Qualificar técnicos e programadores no framework CakePHP.

2.2 Público Alvo

Técnicos e Programadores que desejam trabalhar com CakePHP.

2.3 Pré-requisitos

Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-mento básico acerca da lógica de programação e PHP.

2.4 Descrição

O curso de CakePHP (Instalação e Configuração) será realizado na modalidade EAD e uti-lizará a plataforma Moodle como ferramenta de aprendizagem. Ele é composto de um módulode aprendizado que será dado na primeira semana e um módulo de avaliação que será dadona segunda semana. O material didático estará disponível on-line de acordo com as datas pré-estabelecidas no calendário.

2.5 Metodologia

O curso está dividido da seguinte maneira:

2.6 Cronograma

• Lição 1 - Introdução;

• Lição 2 - MVC;

21

Page 23: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

• Lição 3 - Estruturas e Convenções;

• Lição 4 - Instalação;

• Lição 5 - Configuração.

As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem neces-sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberáuma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menordo que 6.0, sugerimos que você faça novamente esta lição.

Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das liçõesquanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveispara que possam ser consultados durante a avaliação final.

Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma deEnsino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.

Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá serenviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.

2.7 Programa

O curso CakePHP (Instalação e Configuração) oferecerá o seguinte conteúdo:

• Introdução;

• MVC;

• Estruturas e Convenções;

• Instalação;

• Configuração.

2.8 Avaliação

Toda a avaliação será feita on-line.Aspectos a serem considerados na avaliação:

• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

Instrumentos de avaliação:

• Participação ativa nas atividades programadas.

• Avaliação ao final do curso.

22

Page 24: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação eobtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordocom a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições

• AF = Avaliações

2.9 Bibliografia

• Site oficial: http://www.cakephp.org

• http://pt.wikipedia.org/wiki/MVC

• http://pt.wikipedia.org/wiki/CakePHP

• < img alt="Creative Commons License"style="border-width:0"src="http://i.creativecommons.org/l/by-nc/2.5/br/88x31.png"/> CakePHP by http://cursos.cdtc.org.br is licensed under a CreativeCommons Atribuição-Uso Não-Comercial 2.5 Brasil License. Based on a work at www.manual.cakephp.com.br

23

Page 25: Cake Php

Capítulo 3

Introdução

A lição a seguir deixará você mais familiarizado com esse Framework.

3.1 Início

O framework CakePHP utiliza os padrões MVC(Modelo-Visão-Controle), porém possui tam-bém classes e objetos adicionais que têm como objetivo proporcionar maior extensãoe e reuso,para que possam adicionar funcionalidades à base MVC de suas aplicações.

3.1.1 Extensões do Controlador

Para ajudar na lógica do controlador temos a classe Componente. Se temos uma mesmalógica e queremos compartilhar entre os controladores (aplicações), o componente é uma boasaída. Por exemplo o componente interno EmailComponent cria e envia e-mails em segundoplano. Para reutilização do método podemos criar um componente que empacote esta funciona-lidade e seja compartilhado entre os controladores.

3.1.2 Extensões de Visão

Helper é a classe que ajuda na lógica da visão. Assim como o componente ajuda o controla-dor, os ajudantes permitem que a apresentação lógica seja acessada e compartilhada entre asvisões.

3.1.3 Extensões de Modelo

Já para o modelo, temos a classe Behavior que age da mesma forma como as demais.

3.2 Estrutura CakePHP

CakePHP possui a característica de usar as classes de Controlador, Modelo e Visão, mastambém possui classes e objetos adicionais que fazem o desenvolvimento em MVC mais rápidoe agradável. Componentes, Behaviors e Ajudantes são classes que proporcionam maior extensão

24

Page 26: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

e reuso para adicionar funcionalidades rapidamente à base MVC das suas aplicações. Agora va-mos começar a subir um pouco o nível para analisar os detalhes de como usar estas ferramentasmais tarde.

3.2.1 Extensões de Controlador

O Componente (Component) é a classe que ajuda na lógica do controlador. Se você tem amesma lógica e quer compartilhar entre controladores (ou aplicações), o componente é uma boasaída. Por exemplo, o componente interno EmailComponent cria e envia e-mails em segundoplano. Ao invés de escrever um método em cada controlador que utiliza esta lógica, pode-se criarum componente que empacote esta funcionalidade e seja compartilhado entre os controladores.

Controladores também são equipados com callbacks. Estes callbacks estão disponíveis paraque você possa utilizar, apenas se você precisar inserir uma lógica entre operações do núcleo doCakePHP. Os callbacks disponíveis incluem:

beforeFilter( ), executado antes de qualquer ação do controlador;beforeRender() , executado depois da lógica do controlador, mas antes da visão ser renderi-

zada;afterFilter() , executado depois de todas as lógicas do controlador, incluindo a renderização

da visão. Não há diferença entre afterRender() e afterFilter() , exceto que você tenha feito umachamada manualmente para render() no seu método do controlador e tenha incluído algumalógica depois dessa chamada.

3.2.2 Extensões de Visão

O Ajudante (Helper) é a classe que ajuda na lógica da visão. Assim como o componente ajudao controlador, os ajudantes permitem que a apresentação lógica seja acessada e compartilhadaentre as visões. AjaxHelper é um dos principais ajudantes. Ele faz requisições AJAX facilmentede dentro das visões.

A maioria das aplicações tem partes do código que são usados repetidamente nas visões.CakePHP facilita o reuso de código na visão com a utilização de layouts e elementos (elements).Por padrão, toda visão é renderizada por um controlador seguindo algum layout. Os elemen-tos são como pequenos trechos de código necessários que podem ser reutilizados em diversasvisões.

3.2.3 Extensões de Modelo

Assim como as outras extensões, os Behaviors funcionam do mesmo modo, adicionando fun-cionalidades entre os modelos. Por exemplo, se você armazenar os dados do usuário em uma es-trutura de árvore, você pode especificar o modelo User como comportamento de árvore e ganharfuncionalidades para remover, adicionar e alterar nós em sua estrutura de árvore fundamental.

Os modelos também são suportados por outra classe chamada DataSource. DataSourcessão abstrações que permitem os modelos manipularem diferentes tipos de dados consistente-mente. Enquanto a principal fonte de dados numa aplicação CakePHP é via banco de dados,você pode escrever DataSources adicionais que permitem seu modelo representar um feed RSS,arquivo CSV, entidades LDAP ou eventos iCal. DataSources permite você associar registros dediferentes fontes: ao invés de limitar em joins do SQL, DataSources permitem você chamar seumodelo de LDAP que está associada a vários eventos iCal.

Assim como nos controladores, modelos têm recursos de callback como:

25

Page 27: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

beforeFind()afterFind()beforeValidate()beforeSave()afterSave()beforeDelete()afterDelete()Os nomes desses métodos devem ser descritivos o bastante para que você saiba o que eles

fazem.Tanto os controladores, ajudantes e modelos têm uma classe pai que você pode usar para defi-

nir modificações na aplicação. AppController (localizado em ’/app/app_controller.php’), AppHel-per (localizado em ’/app/app_helper.php’) e AppModel (localizado em ’/app/app_model.php’) sãobons lugares para colocar métodos que você precisa para acessar entre todos os controladores,ajudantes e modelos.

Embora não sejam classes ou arquivos, as rotas definem regras na requisição feita para oCakePHP. As definições das rotas definem como o CakePHP deve mapear uma URL para ummétodo do controlador. O behavior padrão assume que a URL ’/controller/action/var1/var2’ ma-peia para Controller::action($var1, $var2), mas você pode usar rotas para personalizar URLs ecomo elas devem ser interpretadas pela sua aplicação.

Alguns recursos na sua aplicação podem ser empacotados com mérito. Um plugin é umpacote de modelo, controlador e visão que realiza um objetivo específico que pode abrangervários aplicativos. Um sistema de gestão de usuários ou um blog simplificado podem ser bonsexemplos de plugins para CakePHP.

26

Page 28: Cake Php

Capítulo 4

MVC

Nessa lição, explicaremos do que se trata o MVC.

4.1 MVC Início

Model-view-controller (MVC) é um padrão de arquitetura de software. Com o aumento dacomplexidade das aplicações desenvolvidas torna-se fundamental a separação entre os dados(Model) e o layout (View). Desta forma, alterações feitas no layout não afetam a manipulação dedados, e estes poderão ser reorganizados sem alterar o layout.

O model-view-controller resolve este problema através da separação das tarefas de acessoaos dados e lógica de negócio, lógica de apresentação e de interação com o utilizador, intro-duzindo um componente entre os dois: o Controller. MVC é usado em padrões de projeto desoftware, mas MVC abrange mais da arquitetura de uma aplicação do que é típico para um pa-drão de projeto.

4.1.1 Descrição do Padrão

É comum dividir a aplicação em camadas separadas: apresentação (interface), domínio eacesso a dados. Em MVC a camada de apresentação também é separada da view e do control-ler.

Model

A representação "domínio"específica da informação em que a aplicação opera. Por exemplo,aluno, professor e turma fazem parte do domínio de um sistema acadêmico. É comum haverconfusão pensando que Model é um outro nome para a camada de domínio. Lógica de domínioadiciona sentido a dados crus (por exemplo, calcular se hoje é aniversário do usuário, ou calcularo total de impostos e fretes sobre um determinado carrinho de compras).

Muitas aplicações usam um mecanismo de armazenamento persistente (como banco de da-dos) para armazenar dados. MVC não cita especificamente a camada para acesso aos dados,porque subentende-se que esses métodos estariam encapsulados pelo Model.

View

27

Page 29: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

"Renderiza"o model em uma forma específica para a interação, geralmente uma interface deusuário.

Controller

Processa e responde a eventos, geralmente ações do usuário, e pode invocar alterações noModel.

MVC é muito visto também em aplicações para Web, onde a View é geralmente a páginaHTML, e o código que gera os dados dinâmicos para dentro do HTML é o Controller. E, por fim,o Model é representado pelo conteúdo de fato, geralmente armazenado em bancos de dados ouarquivos XML.

Ainda que existam diferentes formas de MVC, o controle de fluxo geralmente funciona comosegue:

1. o usuário interage com a interface de alguma forma (por exemplo, o usuário aperta umbotão);

2. o Controller manipula o evento da interface do usuário através de uma rotina pré-escrita;3. o Controller acessa o Model, possivelmente atualizando-o de uma maneira apropriada,

baseado na interação do usuário (por exemplo, atualizando os dados de cadastro do usuário);4. algumas implementações de View utilizam o Model para gerar uma interface apropriada

(por exemplo, mostrando na tela os dados que foram alterados juntamente com uma confirmação).O View obtém seus próprios dados do Model. O Model não toma conhecimento direto da View;

5. a interface do usuário espera por próximas interações, que iniciarão o ciclo novamente.

Existe também uma forma de interpretação do padrão MVC que é:

1. View - páginas em formato com resposta HTML (JSP,ASP,PHP);2. Controller - controle da regra de negócio;3. Model - representação dos elementos do seu domínio e interação com as ferramentas de

persistência.

Essa interpretação é comum quando o sistema é muito pequeno (cadastro de livro para bi-blioteca) ou a linguagem de programação não oferece um framework amigável para o trabalho(Ruby, Coldfusion).

4.1.2 Frameworks MVC

ActionScript 3

• PureMVC - Framework para ActionScript 3

Java

• Apache Struts - Framework MVC

• Mentawai - Framework MVC

• Tapestry - Framework MVC

• VRaptor - Framework controlador MVC

28

Page 30: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

• WebWork - Framework MVC

• Neo Framework - Framework MVC

• Spring MVC - Framework MVC

• JSF - Framework MVC

Perl

• Catalyst - Framework MVC escrito em Perl

PHP

• CakePHP - Framework MVC

• CodeIgniter - Framework MVC

• Symfony - Framework MVC

• XPT Framework - Framework em PHP no padrão MVC

• Zend Framework - Framework em PHP no padrão MVC

Python

• Django - framework escrito em Python que contempla MVC;

• TurboGears - framework baseado em várias outras tecnologias existentes no mundo quegira em torno da linguagem Python.

Ruby

• Rails - conjunto de frameworks, incluindo MVC, para Ruby

Mas veremos somente o Framework MVC para PHP.

29

Page 31: Cake Php

Capítulo 5

Estruturas e Convenções

Nessa lição, mostraremos o que deve ser seguido na hora de criar um aplicativo utilizando oCakePHP.

5.1 Estrutura de arquivos do CakePHP

Vamos dar uma olhada o que é o CakePHP fora da caixa. Você sabe que o CakePHP utiliza-seda requisição básica do MVC, mas não sabe como que os arquivos são organizados.

• app

• cake

• docs

• index.php

• vendors

Quando você faz o download do CakePHP, você verá que possui quatro pastas principais. Apasta app será o lugar da sua mágica: aqui serão guardados os arquivos da sua aplicação. Apasta cake é onde a mágica acontece. Faça um compromisso pessoal de não editar os arquivosdesta pasta! Nós não o ajudaremos se modificá-la. A pasta docs contém as informações dealterações, licença, etc. Finalmente, a pasta vendors é onde você colocará aplicativos de terceirospara utilizar na aplicação, por exemplo, jQuery, prototype, FCKEditor, etc.

5.1.1 Estrutura do diretório App

A pasta app do CakePHP é onde normalmente você colocará sua aplicação em desenvolvi-mento, vamos dar uma olhada mais de perto dentro desta pasta.

config

Contém os arquivos de configuração. Detalhes das conexões ao banco de dados, bootstrap-ping, arquivos de configuração do núcleo e outros devem ser armazenados aqui.

30

Page 32: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

controllers

Contém os controladores da sua aplicação e seus componentes.

locale

Guarda os arquivos com as strings para internacionalizaçao.

models

Contém os modelos, behaviors e datasources da sua aplicação.

plugins

Contém os pacotes de plugins.

tmp

Aqui é onde o CakePHP armazena os arquivos temporários. Os dados atuais são armazena-dos onde você tenha configurado o CakePHP, mas esta pasta normalmente é usada para guardara descrição dos modelos, logs e outras informações, como as das sessões.

vendors

Qualquer classe ou biblioteca de terceiro deve ser armazenada aqui. Para fazer um acessorápido e fácil, use a função vendors(). Você pode achar que esta pasta é redundante, já queexiste uma pasta com mesmo nome no nível superior da estrutura. Nós vamos ver diferenças en-tre estas duas pastas quando discutirmos sobre manipulação de múltiplas aplicações e sistemasmais complexos.

view

Arquivos de apresentação devem vir aqui: elementos, páginas de erro, ajudantes, layouts earquivos de visões.

webroot

No modo de produção, esta pasta deve servir como a pasta raiz da sua aplicação. Den-tro desta pasta são guardados os arquivos públicos, como estilos CSS, imagens e arquivos deJavaScript.

5.2 Convenções no CakePHP

Nós somos grandes fãs de convenções nas configurações. Enquanto isso toma um pouco detempo, para aprender as convenções do CakePHP você ganha tempo em um longo processo:seguindo as convenções, você ganha funcionalidades gratuitamente e livra-sede madrugas de

31

Page 33: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

manutenção de arquivos de configuração. Convenções também fazem com que o sistema fiqueuniformemente desenvolvido, permitindo que outros desenvolvedores o ajudem mais facilmente.

Convenções no CakePHP tem sido produzida por anos de experiência em desenvolvimentoweb e boas práticas. Enquanto nós sugerimos que use essas convenções enquanto desenvolveem CakePHP, nós devemos mencionar que muitos desses princípios são facilmente sobrescritospor alguma coisa que é especialmente passado quando trabalha-se com sistemas legados.

5.2.1 Convenções de arquivos e nome de classes

Em geral, nome dos arquivos são sublinhados, enquanto nome de classes são CamelCased,ou seja, primeiras letras das palavras em maiúsculo. A classe KissesAndHugsController pode serencontrada no arquivo kisses_and_hugs_controller.php, por exemplo.

Porém, o nome da class e seu tipo não são necessariamente encontrados no nome do arquivo.A classe EmailComponent é encontrada no arquivo chamado email.php e a classe HtmlHelper éencontrada no arquivo html.php.

5.2.2 Convenções de modelo

Nome das classes de modelo devem ser no singular e CamelCased. Person, BigPerson eReallyBigPerson são todos os exemplos de nomes convencionados para modelos.

Os nomes das tabelas correspondem ao nome do modelo do CakePHP, mas no plural e su-blinhados. As tabelas para os modelos mencioados anteriormente devem ser people, big_peoplee really_big_people, respectivamente.

Tabelas associadas, usadas em relações hasAndBelongsToMany entre modelos, devem sernomeadas depois dos modelos das tabelas que a compõem, em ordem alfabética (apples_zebrasem vez de zebras_apples). Se sua aplicação possui esse tipo de relação entre os modelos Tag ePost, o nome deve ser posts_tags.

5.2.3 Convenções de controlador

O nome das classes de controladores são no plural, CamelCased e no final ’Controller’. Peo-pleController, BigPeopleController e ReallyBigPeopleController são todos os exemplos convenci-onais para nome de controladores.

A primeira função que você deve escrever em um controlador deve ser o método index().Quando alguém requisita um controlador sem ação, o behavior padrão é renderizar o métodoindex() do controlador. Por exemplo, a requisição para http://www.exemplo.com.br/apples/ mapeiapara a chamada da função index() do ApplesController, assim como http://www.exemplo.com.br/apples/viewmapeia para a chamada da função view() no ApplesController.

Você também pode alterar a visibilidade das funções do controlador em CakePHP colocandosublinhados na frente do nome das funções. Se a função do controlador estiver com sublinhadona frente, a função não será disponibilizada para acesso da web através do dispatcher, masestará disponível para uso interno.

5.2.4 Convenções de visão

Os arquivos de template das visões são chamados depois das funções que os controladoresmostram, na forma com sublinhados. A função getReady() da classe PeopleController irá procurarpelo template da visão em /app/views/people/get_ready.ctp.

32

Page 34: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

O modelo básico é /app/views/controller/underscored_function_name.ctp.Nomeando os pedaços da aplicação e usando as convenções do CakePHP, você ganha fun-

cionalidades sem luta e proteção configuração. Aqui o exemplo final que vincula as associações:

• abela no banco de dados: ’people’

• Classe do Modelo: ’Person’, encontrada em /app/models/person.php

• Classe do Controlador: ’PeopleController’, encontrado em /app/controllers/people_controller.php

• Template da Visão: encontrado em /app/views/people/index.ctp

Usando estas convenções, CakePHP sabe que a requisição para http://www.exemplo.com.br/people/mapeia para a chamada da função index() do PeopleController, onde o modelo Person é automa-ticamente disponibilizado (e automaticamente associado a tabela ’people’ no banco de dados), erenderiza isso para o arquivo. Nenhuma destas relações foram configuradas por qualquer meioque não seja através da criação de classes e arquivos que você precise criar em algum lugar.

Obs.: Os sites mostrados e os que serão mostrados não direcionam para uma página real,são somente exemplos.

33

Page 35: Cake Php

Capítulo 6

Instalação

Nessa lição será mostrado o que é necessário para que você instale o CakePHP e tambémos passos para a instalação.

6.1 Requisitos necessários para instalação do CakePHP

Servidor HTTP. Apache com mod_rewrite é preferido, mas não é obrigatório.PHP 4.3.2 ou superior. Sim! CakePHP funciona com PHP 4 e PHP 5.Tecnicamente um banco de dados não é obrigatório, mas imaginamos que a maioria das

aplicações irão utilizar um. CakePHP suporta uma variedade de banco de dados:

• MySQL (4 ou superior);

• PostgreSQL;

• Firebird DB2;

• Microsoft SQL Server;

• Oracle;

• SQLite;

• ODBC;

• ADOdb.

6.1.1 Preparando para instalação

Baixando o CakePHPHá duas maneiras de pegar uma cópia do CakePHP, primeiro: você pode baixar o arquivo

(zip/tar.gz/tar.bz2) ou você pode baixar o código do repositório SVN.Para pegar a cópia estável, visite o site http://www.cakephp.org. Lá haverá um link chamado

"Download Now!"para baixar. Os arquivos do CakePHP também são armazenados no CakeForgee você pode visitar a página do projeto no site http://cakeforge.org/projects/cakephp

Se você quer os arquivos mais atuais, verifique no site http://cakephp.org/downloads/index/nightlye verá a última versão estável, porém nem sempre a última release. Nestas versões incluem cor-reções entre releases. Ou seja, são versões intermediárias entre releases, mas que são estáveis.

34

Page 36: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

Para pegar os arquivos direto do repositório SVN, conecte-se em https://svn.cakephp.org/repo/branches/1.2.x.x.

Permissões

O CakePHP usa o diretório /app/tmp para diversas operações. Descritivos dos modelos, fazercache de visões e informações das sessões são alguns exemplos.

Assim, tenha certeza que o diretório /app/tmp na instalação do seu cake permite escrita pelousuário do servidor de web.

Instalar o CakePHP pode ser feito simplesmente descompactando o conteúdo no seu servidorweb ou de forma mais complexa e flexível, do jeito que você preferir. Esta seção vai falar de trêsmaneiras de instalar o CakePHP: desenvolvimento, produção e avançada.

Desenvolvimento: fácil para começar, URL dos seus aplicativos incluem o diretório de instala-ção do CakePHP e é menos seguro;

Produção: requer maior habilidade para configurar o servidor web, porém mais seguro e comURLs mais amigáveis;

Avançada: com algumas configurações, permite que você coloque os diretórios do CakePHPem diferentes locais do sistema, possibilitando compartilhar o núcleo do CakePHP entre diversasaplicações.

Desenvolvimento

Apenas coloque seus arquivos do CakePHP no diretório público do seu servidor web (normal-mente htdocs, www, public_html). Por exemplo, assumindo que o diretório público do seu servidorweb seja /var/www/html, os arquivos devem ficar desta maneira:/var/www/html/ ake/app/ ake/do s/index.php/vendors

Produção

Para utilizar-se do modelo de produção, você precisará ter privilégios de acessar o diretóriopúblico do servidor web. Escolhendo o modo de produção significa que todo o domínio age comoum único pedido CakePHP.

A disposição dos arquivos no modo de produção fica da seguinte maneira:/pasta_para_o_ ake//app35

Page 37: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF/webroot (este diretório deve ser seu diretório públi o do servidor web)/ ake/do s/index.php/vendorsSe sua aplicação está hospedada no Apache, a diretiva DocumentRoot para seu domínio deve

ficar assim: DocumentRoot /pasta_para_o_cake/app/webroot

6.2 Instalação avançada

Aqui estão algumas situações que você escolhe o lugar onde os diretórios do CakePHP vãoficar no seu sistema. Isto pode ser por causa de uma restrição do sistema ou para compartilharas bibliotecas entre diferentes aplicações. Esta seção descreve como espalhar seus diretórios doCakePHP no sistema.

Primeiro, note que há três partes principais da sua aplicação CakePHP:1. as bibliotecas do núcleo do CakePHP, em /cake;2. Oo código da sua aplicação, em /app;3. os arquivos públicos da sua aplicação, normalmente em /app/webroot.Cada um desses diretórios pode ser colocado em qualquer lugar do seu sistema, com exceção

do webroot, que precisa estar acessivel pelo servidor web. Você pode mover a pasta webroot parafora do diretório da sua aplicação (app), desde que informe ao Cake onde você vai colocá-la.

Para configurar sua instalação do Cake, vamos ter que fazer algumas alterações no arquivo/app/webroot/index.php. Aqui existem três constantes que precisaremos editar: ROOT, APP_DIRe CAKE_CORE_INCLUDE_PATH.

ROOT deve ser configurada para informar o diretório onde sua aplicação se encontra, ou seja,onde está a pasta app;

APP_DIR deve ser configurada para informar qual a pasta app;CAKE_CORE_INCLUDE_PATH deve ser configurada para informar o diretório onde estão as

bibliotecas do CakePHP (a pasta cake).Vamos fazer um exemplo para que você veja como funciona a instalação avançada na prática.

Imagine que eu quero que a aplicação funcione como segue:

• as bibliotecas do CakePHP deverão ser colocadas em /usr/lib/cake;

• o diretório público da minha aplicação (webroot) deve ser em /var/www/meusite;

• o diretório da aplicação deve ser /home/eu/meusite.

Com estas configurações preciso editar o meu arquivo webroot/index.php (que no final deveestar em /var/www/meusite/index.php, neste exemplo) e ver o seguinte:if (!defined('ROOT')) {

36

Page 38: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DFdefine('ROOT', DS.'home'.DS.'eu');}if (!defined('APP_DIR')) {define ('APP_DIR', 'meusite');}if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.' ake');/app/webroot/index.php (parcialmente, comentários foram removidos)É recomendado que você use a constante DS no lugar das barras entre os diretórios. Isso

previne que não cause erro quando se use a aplicação em sistemas operacionais diferentes,tornando seu código mais portável.

6.2.1 Caminhos adicionais para classes

Em algumas ocasiões é interessante compartilhar as classes do MVC entre as aplicações nomesmo sistema. Se você quer um mesmo controlador para mesma aplicação, você pode usar oarquivo bootstrap.php do CakePHP para adicionar estas classes adicionais.

No bootstrap.php, defina algumas variáveis com nomes especiais para fazer com que o Ca-kePHP olhe nestes diretórios a procura da sua classe:

$viewPaths = array();$controllerPaths = array();$modelPaths = array();$helperPaths = array();$componentPaths = array();$behaviorPaths = array();Cada um dessas variáveis especiais pode ser um conjunto na array com o diretório absoluto

onde estão as classes que você desejar. Tenha certeza que cada diretório especificado inclua asbarras com DS.

6.2.2 Apache e mod_rewrite

Enquanto o CakePHP é construído para trabalhar com o mod_rewrite e vimos que muitosusuários apanham para conseguir fazer isto funcionar nos seus sistemas, nós lhe daremos algu-mas dicas que você pode tentar para rodar corretamente:

* tenha certeza que o override está habilitado no .htaccess. Em seu httpd.conf, você deve olharna seção que define seu Directory no servidor. Tenha certeza que AllowOverride está configuradocomo All para o diretório correto de DocumentRoot;

* tenha certeza que você está editando o httpd.conf do sistema antes da configuração dousuário ou do site em específico;

* tenha certeza que o arquivo .htacess está na pasta do CakePHP. Em alguns sistemas ope-racionais ele pode ficar oculto na hora de mover devido a interpretarem o ’.’ como sinônimo

37

Page 39: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

de ocultamento. Tenha certeza que sua cópia do CakePHP é do site ou repositório oficial doCakePHP e que foi extraído corretamente;

* tenha certeza que você está carregando o mod_rewrite corretamente. Você pode ver algocomo LoadModule rewrite_module libexec/httpd/mod_rewirte.so e AddModule mod_rewrite.c noseu httpd.conf;

* se você está instalando no diretório do usuário (http://exemplo.com.br/ username), vocêterá que modificar o arquivo .htaccess no diretório da base da instalação do CakePHP. Apenasadicione a linha "RewriteBase / meuusername/".

6.2.3 Comece agora!

Tudo bem, vamos ver o CakePHP em ação. Dependendo de qual opção de instalação você uti-lizou, acesse no seu browser o link http://exemplo.com.br ou http://exemplo.com.br/cake_instalado/.Neste ponto, você verá a página padrão do CakePHP e a mensagem do estado da configuraçãodo seu banco de dados.

Parabéns! Você já pode criar sua primeira aplicação CakePHP.

38

Page 40: Cake Php

Capítulo 7

Configuração

Nessa lição, ensinaremos como configurar o seu CakePHP, como a Base de Dados, Rotas(Routes) e Inflexões personalizadas.

7.1 Configuração da Base de Dados

O CakePHP espera que os detalhes de configuração da base de dados estejam no arquivoapp/config/database.php. Um exemplo de configuração da base de dados pode ser encontradoem app/config/database.php.default.

A configuração final deve ser parecida com o exemplo abaixo.var \$default = array('driver' => 'mysql','persistent' => false,'host' => 'lo alhost','login' => 'usuarioDB','password' => 'senhaDB','database' => 'basededados','prefix' => '');7.1.1 Exemplo de configuração da base de dados

A conexão $default é usada a menos que outra configuração seja especificada pela proprie-dade $useDbConfig em um modelo. Por exemplo, se minha aplicação tiver uma base de dadosadicional do legacy além do padrão, eu poderia usá-la em meus modelos criando uma nova cone-xão da base de dados de $legacy similar a configuração $default, e ajustando a var $useDbConfig= ’legacy’; nos modelos apropriados.

Escreva corretamente, na configuração, para atender melhor as suas necessidades.

39

Page 41: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

7.1.2 Chave

driver: o nome do driver da base de dados para esta configuração. Exemplos: mysql, post-gres, sqlite, pear-drivername, adodb-drivername, mssql, oracle, ou odbc;

persistent: se usará ou não uma conexão persistente com a base de dados;

host: o nome do servidor da base de dados (ou endereço IP);

login: o usuário desta conta;

password: a senha desta conta;

database: o nome da base de dados que esta conexão usará;

prefix(optional): esta string será adicionada como prefixo no nome de todas tabelas de suabase de dados. Se suas tabelas não possuem prefixo, deixe esta string vazia;

port(optional): a porta TCP ou socket Unix usado para conectar com o servidor;

encoding: indica qual caractere definido será usado para enviar indicações SQL ao servidor;

schema: usado em instalações de base de dados PostgreSQL para especificar qual schemausar.

Note que as configurações de prefixo são para as tabelas, não para os modelos. Por exemplo,se você criou um relacionamento entre as tabelas Apple e Flavor, o nome será prefixo_apples_flavors(não prefixo_apples_prefixo_flavors), isso se sua opção de prefixo estiver como ’prefixo_’.

A partir deste ponto, você deve dar uma olhada nas Convenções CakePHP, mostradas nestemanual. A nomenclatura correta para suas tabelas (e o nome de algumas colunas) pode livrar dealgumas implementações e configurações desnecessárias.

7.2 Configurações de Rotas (Routes)

Rotas é uma funcionalidade que mapeia URLs em ações do controller. Foi adicionado aoCakePHP para tornal URL amigáveies mais configuráveis e flexíveis. Não é obrigatório o usodo mod_rewrite para usar rotas, mas usando-o fará sua barra de endereços muito mais limpa earrumada.

Rotas no CakePHP 1.2 foi ampliada e pode ser muito mais poderosa.Antes de aprender sobre como configurar suas próprias rotas, você deveria saber que o Ca-

kePHP vem configurado com um conjunto de rotas padrão. A configuração padrão de rotas doCakePHP deixará as URLs mais bonitas para qualquer aplicação. Você pode acessar diretamenteuma ação via URL colocando seu nome na requisição. Você pode também passar parâmetrospara suas ações no controller usando a própria URL.

http://exemplo.com/controller/action/param1/param2/ param3 URL para a rota padrão

40

Page 42: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

A URL /noticias/ler mapeia para a ação ler() do controller Noticias (NoticiasController), e /pro-dutos/verInformacoes mapeia para a ação view_informacoes() do controller Produto (Produtos-Controller). Se nenhuma ação é especificada na URL, a ação index() será chamada.

A rota padrão também permite passar parâmetros para as ações usando a URL. Uma requi-sição /noticias/ler/12 seria equivalente a chamar o método ler(12) no controller Noticias (Noticias-Controller), por exemplo.

Uma novidade no CakePHP 1.2 é a possibilidade de usar parâmetros nomeados. Você podenomear parâmetros e enviar seus valores usando a URL. Uma requisição /noticias/ler/titulo:primeira+noticia/categoresportes teria como resultado uma chamada a ação ler() do controller Noticias (NoticiasControl-ler). Nesta ação, você encontraria os valores dos parâmetros título e categoria dentro de $this->passedArgs[’titulo’] e $this->passedArgs[’categoria’] respectivamente.

7.2.1 Alguns exemplos para a rota padrão

URL: /monkeys/jump Mapeado para: MonkeysController->jum p();URL: /products Mapeado para: ProductsController->index( );URL: /tasks/view/45 Mapeado para: TasksController->view (45);URL: /donations/view/recent/2001 Mapeado para: Donation sController->view(’recent’,

’2001’);URL: /contents/view/chapter:models/section:associati ons

Mapeado para: ContentsController->view();

$this->passedArgs[’chapter’] = ’models’; $this->passed Args[’section’] = ’associations’;Mapeando URL para ações do controller usando rotas padrão.Definindo suas próprias rotas permite a definição de como sua aplicação responderá a uma

dada URL. Defina suas próprias rotas no arquivo /app/config/routes.php usando o método Rou-ter::connect().

O método connect() recebe três parâmetros: a URL que você deseja casar, o valor padrãopara os elementos de rota, e regras de expressões regulares para ajudar a encontrar elementosna URL.

O formato básico para uma definição de rota é:Router:: onne t('URL',array('paramName' => 'defaultValue'),array('paramName' => 'mat hingRegex'))7.3 Inflexões personalizadas

As convenções de nomenclatura do Cake podem ser realmente legais. Você pode nomearsua tabela big_boxes, seu model BigBox, seu controller BigBoxesController e tudo isso funciona

41

Page 43: Cake Php

CDTC Centro de Difusão de Tecnologia e Conhecimento Brasília/DF

em conjunto automaticamente. A maneira que o CakePHP usa para associar todas juntas éatravés da utilização de inflections (inflexões), que transformam as palavras do singular em plurale vice-versa.

Existem ocasiões (especialmente para nossos amigos que não falam inglês), onde você poderodar o inflector do CakePHP (a classe que pluraliza, singulariza, camelCases e under_scores) enão funcionar como você gostaria. Se o CakePHP não reconhecer seu Foci ou Fish, editando oarquivo de configuração personalizada de inflexões você poderá indicar seus casos especiais. Oarquivo de configuração é encontrado em /app/config/inflections.php.

Neste arquivo, você encontrará seis variáveis. Cada uma permite fazer o ajuste fino dasinflections do CakePHP.

7.3.1 Variáveis do inflections.php

$pluralRules - este array contém regras de expressões regulares para pluralizar casos espe-ciais. A chave do array são os patterns e o valor são as substituições;

$uninflectedPlural - um array que contém palavras que não precisam ser alteradas quandopassadas para o plural (lápis, etc.);

$irregularPlural - um array que contém palavras e seus plurais. A chave do array contém aforma no singular e o valor a forma no plural. Este array deve ser usado para guardar palavrasque não seguem as definições em $pluralRules;

$singularRules - similar a $pluralRules, contém as regras para singularizar as palavras;$uninflectedSingular - similar a $uninflectedPlural, contém as palavras que não contém

forma no singular. Por padrão, este array tem o mesmo valor de $uninflectedPlural;$irregularSingular - similar a $irregularPlural, contém as palavras que possuem apenas a

forma singular.

Obs.: foi criado um modelo da inflections.php para o idioma português.

Com isso, encerramos o curso de CakePHP (Instalação e Configuração). Esperamos quetenha aproveitado.

42