CakePHP 26 de Setembro de 2008
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 2.1 Objetivo . . . 2.2 Público Alvo . 2.3 Pré-requisitos 2.4 Descrição . . 2.5 Metodologia . 2.6 Cronograma 2.7 Programa . . 2.8 Avaliação . . 2.9 Bibliografia .
. . . . . . . . .
20 20 20 20 20 20 20 21 21 22
. . . . . . . .
23 23 23 23 23 23 24 24 24
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
3 Introdução 3.1 Início . . . . . . . . . . . . . . . . . 3.1.1 Extensões do Controlador . 3.1.2 Extensões de Visão . . . . 3.1.3 Extensões de Modelo . . . 3.2 Estrutura CakePHP . . . . . . . . 3.2.1 Extensões de Controlador . 3.2.2 Extensões de Visão . . . . 3.2.3 Extensões de Modelo . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
4 MVC 26 4.1 MVC Início . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.1.1 Descrição do Padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.1.2 Frameworks MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1
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 2.1 Objetivo . . . 2.2 Público Alvo . 2.3 Pré-requisitos 2.4 Descrição . . 2.5 Metodologia . 2.6 Cronograma 2.7 Programa . . 2.8 Avaliação . . 2.9 Bibliografia .
. . . . . . . . .
20 20 20 20 20 20 20 21 21 22
. . . . . . . .
23 23 23 23 23 23 24 24 24
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
3 Introdução 3.1 Início . . . . . . . . . . . . . . . . . 3.1.1 Extensões do Controlador . 3.1.2 Extensões de Visão . . . . 3.1.3 Extensões de Modelo . . . 3.2 Estrutura CakePHP . . . . . . . . 3.2.1 Extensões de Controlador . 3.2.2 Extensões de Visão . . . . 3.2.3 Extensões de Modelo . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
4 MVC 26 4.1 MVC Início . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.1.1 Descrição do Padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.1.2 Frameworks MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1
CD T C
Centro de Difusão de Tecnologia e Conhecimento
5 Estruturas e Convenções 5.1 Es Esttrut utuura de arquiv ivoos do Cak akeePH PHP P.. . . .. . . . . 5.1.1 Estrutura do diretório App . . . . . . . . . . . 5.2 Convenções no CakePHP . . . . . . . . . . . . . . . 5.2. 5. 2.11 Co Connven ençõ ções es de ar arqu quiv ivos os e no nome me de cl clas asse sess 5.2.2 Convenções de modelo . . . . . . . . . . . . 5.2. 2.33 Convenç nçõões de control olaado dorr . . . . . . . . . . 5.2.4 Convenções de visão . . . . . . . . . . . . .
. . . . . . .
6 Instalação 6.11 Re 6. Requ quis isititos os ne nece cess ssár ário ioss pa parra in inst stal alaç ação ão do Ca CakkeP ePHP HP . 6.1. 1.11 Prepar araand ndoo para instal alaação . . . . . . . . . . . 6.2 Instalação avançada . . . . . . . . . . . . . . . . . . . 6.2. 2.11 Caminh nhos os ad adiicio ionnai aiss para classes . . . . . . . 6.2.2 Apache e mod_rewrite . . . . . . . . . . . . . . 6.2.3 Comece agora! . . . . . . . . . . . . . . . . . . 7 Configuração 7.1 Configuração da Base de Dados . . . . . . . . . . . 7.1. 7. 1.11 Ex Exem empl ploo de co confi nfigu gurraç ação ão da ba base se de da dado doss 7.1.2 Chave . . . . . . . . . . . . . . . . . . . . . . 7.2 Confi nfiggur uraaçõe õess de Rot otaas (Rout utes es)) . . . . . . . . . . . 7.2. 7. 2.11 Al Algu guns ns exem empl plos os pa parra a rot otaa pa padr drão ão . . . . . 7.3 Inflexões personalizadas . . . . . . . . . . . . . . . . 7.3. 3.11 Variá iávveis do inflec ecttio ionns.php . . . . . . . . . .
2
. . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Brasília/DF
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . .
29 29 29 30 31 31 31 31
. . . . . .
33 33 33 35 36 36 37
. . . . . . .
38 38 38 39 39 40 40 41
Parte I
Sobre essa apostila
3
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 internet, 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ça GNU Free Documentation License , cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (
[email protected] ), desde outubro de 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 Aquino Soares (
[email protected]). O texto original faz parte do projeto Centro de Difusão de Tecnolgia e Conhecimento, que vem sendo realizado pelo ITI em conjunto com outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas atréves do email
[email protected] , ou da home 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 responsabilidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta 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 terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation License.
4
Parte II
Informações Básicas
5
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 do desenvolvimento 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 e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento 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 como incentivadores e defensores de produtos de software não proprietários e código fonte aberto, oferecendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos 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 produtos de software livre.
Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu 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 o roteiro acima.
Licença Copyright ©2006, Diego de Aquino Soares (
[email protected]). 6
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 termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Software Foundation; com o Capítulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Documentaçã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ância 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 seus colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo. • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais. • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-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, aprendizagens e 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ão controla 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ções que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
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 que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso, é recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalizaçã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 participante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser 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, por pessoas 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 das ferramentas 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 respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
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 tutor ou 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 porque 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 um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaç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
Parte III
GNU Free Documentation License
10
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 distribuiçã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 melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Portuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. 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, mas não é permitido alterá-lo.
INTRODUÇÃO O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no sentido 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ém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Geral (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 software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença principalmente 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 pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. 11
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 é um licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata exclusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seçã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 relacionadas, 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, como sendo 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 Capa Frontal 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 automaticamente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de 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 de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou desencorajar 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 simples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietá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 estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade 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ão tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proeminente do título do trabalho, precedendo o início do corpo do texto.
12
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ão comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acrescente 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 de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar compensaçã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ém pode 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 do Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o titulo completo com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, 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ópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, a qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavelmente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (diretamente 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 de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento.
13
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ção e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, 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 Documento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o 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 cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); 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 às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa 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 dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um 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 uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Documento 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 publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 14
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 contribuidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus 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ão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos precisam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qualquer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definiçã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 Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto 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 por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada.
COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na combinação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas 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 Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 15
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 editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos 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 diversos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licenç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 separados e independentes, em um volume ou mídia de distribuição, não conta como uma Versão Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, 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 Capa do 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ções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também inclua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 16
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 expressamente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicenciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documentação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que 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ão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versã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ça no 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ça de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Software Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da licenç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 de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomendamos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 17
CDTC
Centro de Difusão de Tecnologia e Conhecimento
tal como a GNU General Public License, para permitir o seu uso em software livre.
18
Brasília/DF
Parte IV
CakePHP
19
Capítulo 1
O que é o curso CakePHP CakePHP é um framework escrito em PHP que tem como principais objetivos oferecer uma estrutura que possibilite aos programadores de PHP de todos os níveis desenvolverem aplicações robustas rapidamente, sem perder flexibilidade. O CakePHP é baseado no framework Ruby on Rails e utiliza padrões de projeto conhecidos, tais como ActiveRecord, Association Data Mapping, Front Controller e MVC (Model-ViewController). Esse curso ensinará como instalar e configurar corretamente o CakePHP para que você possa criar seus aplicativos.
20
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 conhecimento 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 utilizará a plataforma Moodle como ferramenta de aprendizagem. Ele é composto de um módulo de aprendizado que será dado na primeira semana e um módulo de avaliação que será dado na 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
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 necessá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 menor do 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ções quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a avaliação final. Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de Ensino 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á ser enviada 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
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 e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com 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/bync/2.5/br/88x31.png"/> CakePHP by http://cursos.cdtc.org.br is licensed under a Creative Commons Atribuição-Uso Não-Comercial 2.5 Brasil License. Based on a work at www.manual.cakephp.
23
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 també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 mesma lógica e queremos compartilhar entre os controladores (aplicações), o componente é uma boa saída. Por exemplo o componente interno EmailComponent cria e envia e-mails em segundo plano. Para reutilização do método podemos criar um componente que empacote esta funcionalidade 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 controlador, os ajudantes permitem que a apresentação lógica seja acessada e compartilhada entre as visõ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, mas também possui classes e objetos adicionais que fazem o desenvolvimento em MVC mais rápido e agradável. Componentes, Behaviors e Ajudantes são classes que proporcionam maior extensão
24
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 vamos começar a subir um pouco o nível para analisar os detalhes de como usar estas ferramentas mais tarde.
3.2.1 Extensões de Controlador O Componente (Component) é a classe que ajuda na lógica do controlador. Se você tem a mesma lógica e quer compartilhar entre controladores (ou aplicações), o componente é uma boa saída. Por exemplo, o componente interno EmailComponent cria e envia e-mails em segundo plano. Ao invés de escrever um método em cada controlador que utiliza esta lógica, pode-se criar um 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 para que você possa utilizar, apenas se você precisar inserir uma lógica entre operações do núcleo do CakePHP. 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 renderizada; 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 uma chamada manualmente para render() no seu método do controlador e tenha incluído alguma ló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 ajuda o controlador, os ajudantes permitem que a apresentação lógica seja acessada e compartilhada entre as visões. AjaxHelper é um dos principais ajudantes. Ele faz requisições AJAX facilmente de 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 elementos são como pequenos trechos de código necessários que podem ser reutilizados em diversas visões.
3.2.3 Extensões de Modelo Assim como as outras extensões, os Behaviors funcionam do mesmo modo, adicionando funcionalidades entre os modelos. Por exemplo, se você armazenar os dados do usuário em uma estrutura de árvore, você pode especificar o modelo User como comportamento de árvore e ganhar funcionalidades 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 . DataSources são abstrações que permitem os modelos manipularem diferentes tipos de dados consistentemente. 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 de diferentes fontes: ao invés de limitar em joins do SQL, DataSources permitem você chamar seu modelo de LDAP que está associada a vários eventos iCal. Assim como nos controladores, modelos têm recursos de callback como: 25
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 definir modificações na aplicação. AppController (localizado em ’/app/app_controller.php’), AppHelper (localizado em ’/app/app_helper.php’) e AppModel (localizado em ’/app/app_model.php’) são bons 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 o CakePHP. As definições das rotas definem como o CakePHP deve mapear uma URL para um método do controlador. O behavior padrão assume que a URL ’/controller/action/var1/var2’ mapeia para Controller::action($var1, $var2), mas você pode usar rotas para personalizar URLs e como elas devem ser interpretadas pela sua aplicação. Alguns recursos na sua aplicação podem ser empacotados com mérito. Um plugin é um pacote de modelo, controlador e visão que realiza um objetivo específico que pode abranger vários aplicativos. Um sistema de gestão de usuários ou um blog simplificado podem ser bons exemplos de plugins para CakePHP.
26
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 da complexidade 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 de dados, 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 acesso aos dados e lógica de negócio, lógica de apresentação e de interação com o utilizador, introduzindo um componente entre os dois: o Controller. MVC é usado em padrões de projeto de software, mas MVC abrange mais da arquitetura de uma aplicação do que é típico para um padrão de projeto.
4.1.1 Descrição do Padrão É comum dividir a aplicação em camadas separadas: apresentação (interface), domínio e acesso a dados. Em MVC a camada de apresentação também é separada da view e do controller. 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 haver confusão pensando que Model é um outro nome para a camada de domínio. Lógica de domínio adiciona sentido a dados crus (por exemplo, calcular se hoje é aniversário do usuário, ou calcular o total de impostos e fretes sobre um determinado carrinho de compras). Muitas aplicações usam um mecanismo de armazenamento persistente (como banco de dados) 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
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 de usuário. Controller Processa e responde a eventos, geralmente ações do usuário, e pode invocar alterações no Model. MVC é muito visto também em aplicações para Web, onde a View é geralmente a página HTML, 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 ou arquivos XML. Ainda que existam diferentes formas de MVC, o controle de fluxo geralmente funciona como segue: 1. o usuário interage com a interface de alguma forma (por exemplo, o usuário aperta um botã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 biblioteca) 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
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 que gira em torno da linguagem Python. Ruby • Rails - conjunto de frameworks, incluindo MVC, para Ruby Mas veremos somente o Framework MVC para PHP.
29
Capítulo 5
Estruturas e Convenções Nessa lição, mostraremos o que deve ser seguido na hora de criar um aplicativo utilizando o CakePHP.
5.1 Estrutura de arquivos do CakePHP Vamos dar uma olhada o que é o CakePHP fora da caixa. Você sabe que o CakePHP utiliza-se da 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. A pasta app será o lugar da sua mágica: aqui serão guardados os arquivos da sua aplicação. A pasta cake é onde a mágica acontece. Faça um compromisso pessoal de não editar os arquivos desta pasta! Nós não o ajudaremos se modificá-la. A pasta docs contém as informações de alterações, licença, etc. Finalmente, a pasta vendors é onde você colocará aplicativos de terceiros para 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 desenvolvimento, 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, bootstrapping, arquivos de configuração do núcleo e outros devem ser armazenados aqui.
30
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 armazenados onde você tenha configurado o CakePHP, mas esta pasta normalmente é usada para guardar a 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 acesso rápido e fácil, use a função vendors(). Você pode achar que esta pasta é redundante, já que existe uma pasta com mesmo nome no nível superior da estrutura. Nós vamos ver diferenças entre estas duas pastas quando discutirmos sobre manipulação de múltiplas aplicações e sistemas mais complexos. view Arquivos de apresentação devem vir aqui: elementos, páginas de erro, ajudantes, layouts e arquivos de visões. webroot No modo de produção, esta pasta deve servir como a pasta raiz da sua aplicação. Dentro desta pasta são guardados os arquivos públicos, como estilos CSS, imagens e arquivos de JavaScript.
5.2 Convenções no CakePHP Nós somos grandes fãs de convenções nas configurações. Enquanto isso toma um pouco de tempo, 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
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 fique uniformemente desenvolvido, permitindo que outros desenvolvedores o ajudem mais facilmente. Convenções no CakePHP tem sido produzida por anos de experiência em desenvolvimento web e boas práticas. Enquanto nós sugerimos que use essas convenções enquanto desenvolve em CakePHP, nós devemos mencionar que muitos desses princípios são facilmente sobrescritos por 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 ser encontrada 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 e ReallyBigPerson 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 sublinhados. As tabelas para os modelos mencioados anteriormente devem ser people, big_people e really_big_people, respectivamente. Tabelas associadas, usadas em relações hasAndBelongsToMany entre modelos, devem ser nomeadas depois dos modelos das tabelas que a compõem, em ordem alfabética (apples_zebras em vez de zebras_apples). Se sua aplicação possui esse tipo de relação entre os modelos Tag e Post, 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’. PeopleController, BigPeopleController e ReallyBigPeopleController são todos os exemplos convencionais 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étodo index() do controlador. Por exemplo, a requisição para http://www.exemplo.com.br/apples/ mapeia para a chamada da função index() do ApplesController, assim como http://www.exemplo.com.br/apples/view mapeia para a chamada da função view() no ApplesController. Você também pode alterar a visibilidade das funções do controlador em CakePHP colocando sublinhados na frente do nome das funções. Se a função do controlador estiver com sublinhado na frente, a função não será disponibilizada para acesso da web através do dispatcher, mas estará 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 controladores mostram, na forma com sublinhados. A função getReady() da classe PeopleController irá procurar pelo template da visão em /app/views/people/get_ready.ctp. 32
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 funcionalidades 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 é automaticamente disponibilizado (e automaticamente associado a tabela ’people’ no banco de dados), e renderiza isso para o arquivo. Nenhuma destas relações foram configuradas por qualquer meio que 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
Capítulo 6
Instalação Nessa lição será mostrado o que é necessário para que você instale o CakePHP e também os 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 CakePHP Há 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 CakeForge e 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/nightly e verá a última versão estável, porém nem sempre a última release. Nestas versões incluem correções entre releases. Ou seja, são versões intermediárias entre releases, mas que são estáveis. 34
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 Permissões O CakePHP usa o diretório /app/tmp para diversas operações. Descritivos dos modelos, fazer cache 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 pelo usuário do servidor de web. Instalar o CakePHP pode ser feito simplesmente descompactando o conteúdo no seu servidor web ou de forma mais complexa e flexível, do jeito que você preferir. Esta seção vai falar de três maneiras 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 com URLs mais amigáveis; Avançada: com algumas configurações, permite que você coloque os diretórios do CakePHP em diferentes locais do sistema, possibilitando compartilhar o núcleo do CakePHP entre diversas aplicações. Desenvolvimento Apenas coloque seus arquivos do CakePHP no diretório público do seu servidor web (normalmente htdocs, www, public_html). Por exemplo, assumindo que o diretório público do seu servidor web seja /var/www/html, os arquivos devem ficar desta maneira:
Produção Para utilizar-se do modelo de produção, você precisará ter privilégios de acessar o diretório público do servidor web. Escolhendo o modo de produção significa que todo o domínio age como um único pedido CakePHP. A disposição dos arquivos no modo de produção fica da seguinte maneira:
35
CDTC
Centro de Difusão de Tecnologia e Conhecimento
Brasília/DF
Se 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ão ficar no seu sistema. Isto pode ser por causa de uma restrição do sistema ou para compartilhar as bibliotecas entre diferentes aplicações. Esta seção descreve como espalhar seus diretórios do CakePHP 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 para fora 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_DIR e 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 deve estar em /var/www/meusite/index.php, neste exemplo) e ver o seguinte:
36
CDTC
Centro de Difusão de Tecnologia e Conhecimento
Brasília/DF
/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 no mesmo sistema. Se você quer um mesmo controlador para mesma aplicação, você pode usar o arquivo bootstrap.php do CakePHP para adicionar estas classes adicionais. No bootstrap.php, defina algumas variáveis com nomes especiais para fazer com que o CakePHP 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 as barras com DS.
6.2.2 Apache e mod_rewrite Enquanto o CakePHP é construído para trabalhar com o mod_rewrite e vimos que muitos usuários apanham para conseguir fazer isto funcionar nos seus sistemas, nós lhe daremos algumas dicas que você pode tentar para rodar corretamente: * tenha certeza que o override está habilitado no .htaccess. Em seu httpd.conf, você deve olhar na seção que define seu Directory no servidor. Tenha certeza que AllowOverride está configurado como All para o diretório correto de DocumentRoot; * tenha certeza que você está editando o httpd.conf do sistema antes da configuração do usuário ou do site em específico; * tenha certeza que o arquivo .htacess está na pasta do CakePHP. Em alguns sistemas operacionais ele pode ficar oculto na hora de mover devido a interpretarem o ’.’ como sinônimo 37
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 do CakePHP e que foi extraído corretamente; * tenha certeza que você está carregando o mod_rewrite corretamente. Você pode ver algo como LoadModule rewrite_module libexec/httpd/mod_rewirte.so e AddModule mod_rewrite.c no seu 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. Apenas adicione 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ê utilizou, 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ção do seu banco de dados. Parabéns! Você já pode criar sua primeira aplicação CakePHP.
38
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 arquivo app/config/database.php. Um exemplo de configuração da base de dados pode ser encontrado em app/config/database.php.default. A configuração final deve ser parecida com o exemplo abaixo.
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 propriedade $useDbConfig em um modelo. Por exemplo, se minha aplicação tiver uma base de dados adicional do legacy além do padrão, eu poderia usá-la em meus modelos criando uma nova conexã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
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, postgres, 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 sua base 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 schema usar. 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 neste manual. A nomenclatura correta para suas tabelas (e o nome de algumas colunas) pode livrar de algumas 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 ao CakePHP para tornal URL amigáveies mais configuráveis e flexíveis. Não é obrigatório o uso do mod_rewrite para usar rotas, mas usando-o fará sua barra de endereços muito mais limpa e arrumada. 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 CakePHP vem configurado com um conjunto de rotas padrão. A configuração padrão de rotas do CakePHP deixará as URLs mais bonitas para qualquer aplicação. Você pode acessar diretamente uma ação via URL colocando seu nome na requisição. Você pode também passar parâmetros para 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
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 /produtos/verInformacoes mapeia para a ação view_informacoes() do controller Produto (ProdutosController). 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 requisição /noticias/ler/12 seria equivalente a chamar o método ler(12) no controller Noticias (NoticiasController), por exemplo. Uma novidade no CakePHP 1.2 é a possibilidade de usar parâmetros nomeados. Você pode nomear parâmetros e enviar seus valores usando a URL. Uma requisição /noticias/ler/titulo:primeira+noticia/c esportes teria como resultado uma chamada a ação ler() do controller Noticias (NoticiasController). 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->jump(); URL: /products Mapeado para: ProductsController->index(); URL: /tasks/view/45 Mapeado para: TasksController->view(45); URL: /donations/view/recent/2001 Mapeado para: DonationsController->view(’recent’, ’2001’); URL: /contents/view/chapter:models/section:associations Mapeado para: ContentsController->view(); $this->passedArgs[’chapter’] = ’models’; $this->passedArgs[’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 Router::connect(). O método connect() recebe três parâmetros: a URL que você deseja casar, o valor padrão para os elementos de rota, e regras de expressões regulares para ajudar a encontrar elementos na URL. O formato básico para uma definição de rota é:
7.3 Inflexões personalizadas As convenções de nomenclatura do Cake podem ser realmente legais. Você pode nomear sua tabela big_boxes, seu model BigBox, seu controller BigBoxesController e tudo isso funciona 41