calendário do advento symfony dia um: começando o projeto ========================================================= O desafio --------- O calendário do advento symfony é um conjunto de 24 tutoriais, publicados dia-a-dia começando no dia primeiro de dezembro até o Natal. Isso mesmo, todos os dias incluindo os finais de semanas, um novo tutorial será publicado. Cada tutorial deve durar menos de uma hora, e será uma oportunidade para acompanhar passo-a-passo o desenvolvimento de uma aplicação web 2.0. Quando chegar o Natal, a aplicação criada será colocada on-line, e o seu código fonte será um software livre. Esta aplicação será usável, interessante, útil e divertida. Vinte e quatro vezes menos de uma hora é menos que um dia, e é exatamente este o tempo que um desenvolvedor precisa para aprender o symfony. Todo dia, novas features serão adicionadas à aplicação, tomaremos este desenvolvimento como um modelo para demonstrar as funcionalidades do symfony assim como a aplicação das boas práticas do desenvolvimento web com ele. A cada dia, você vai descobrir como é rápido e eficiente o desenvolvimento de uma aplicação web utilizando o symfony, e você vai querer saber cada vez mais. Considerando que isto não é o suficiente para um desafio, e também porque não queremos nada com a dureza, não temos planos para o 21° dia. A funcionalidade mais requisitada pela comunidade será adicionada à aplicação neste dia, sem preparativo algum, e isso vai funcionar. Será o dia do seja-o-guru-do-symfony-por-um-dia. O projeto ---------- A aplicação a ser desenvolvida poderia ser mais uma daquelas "mostre-e-explique", como uma lista de tarefas, um catálogo de endereços ou uma loja de livros. Mas nós queremos utilizar o symfony em um projeto original, alguma coisa realmente útil, com diversas funcionalidades e um tamanho considerável. O que queremos na verdade é provar que o symfony pode ser utilizado em situações complexas para desenvolver aplicações profissionais com estilo e pouco esforço. Nós esperamos também que muitas pessoas usem e abusem da aplicação, para demostrar que um website desenvolvido com o symfony suporta uma grande carga. É por isso que a aplicação necessita trazer um serviço real e responder à uma necessidade existente - ou criar uma nova. O lançamento do website será um teste de stress real; isto também significa que nós precisamos de vocês, amigos leitores, para divulgar (digg/bookmark/blog) o site e falar sobre ele na vida real para verficarmos quantas visitas ele pode suportar. O conteúdo do projeto será mantido em segredo até o próximo dia. Nós ainda temos muito o que fazer sem descrever uma aplicação web 2.0 completa. Isto deve dar a você algum tempo para pensar e levantar hipóteses adicionais. De qualquer forma, nos precisamos de um nome, então vamos chamá-la de: **askeet**. O que temos para hoje --------------------- O objetivo do dia é mostrar a página da aplicação em um navegador web, e configurar um ambiente profissional de desenvolvimento. Isto inclui a instalação do symfony, a criação da aplicação, a configuração do servidor web e a configuração do sistema de controle de versão. Isto será fácil para aqueles que já seguiram os tutoriais anteriores e não tão difícil para os outros. E, no final, todo mundo deverá ter apredido alguma coisa nova. Vamos considerar que você está usando um sistema Unix-like com Apache, MySQL e PHP 5 instalados. Se você utiliza o Windows, não entre em pânico: tudo irá funcionar perfeitamente, você só terá que digitar alguns comandos no prompt. Instalação do Symfony --------------------- A maneira mais simples de se instalar o symfony é usando o pacote [PEAR][1]. De qualquer forma, para poder utilizar os canais - e acessar o canal do symfony - você precisa atualizar o PEAR para a versão 1.4.0 ou superior (a menos que você esteja usando o PHP 5.1.0, que já inclui a versão 1.4.5 do PEAR): $ pear upgrade PEAR >**Nota**: Se você tiver algum problema ao utilizar o PEAR, verifique o capítulo de [instalação](http://www.symfony-project.com/book/1_0/02-Exploring-Symfony-s-Code) do livro. Agora você já pode adicionar o canal 'symfony': $ pear channel-discover pear.symfony-project.com Tudo pronto para você instalar a última versão estável do symfony juntamente com todas as suas dependências: $ pear install symfony/symfony Verifique se o symfony foi instalado corretamente usando o prompt de comando para mostrar a versão: $ symfony -V Se você está curioso para saber o que esta nova ferramenta de linha comando pode fazer por você, digite `symfony -T` para listar as opções disponíveis. Você também pode querer dar uma olhada no capítulo de [instalação](http://www.symfony-project.com/book/1_0/02-Exploring-Symfony-s-Code) do livro para saber como instalar o symfony através de um arquivo tgz ou do repositório SVN. Uma contribuição da comunidade também indica os passos para realizar a instalação sem o PEAR no [wiki do symfony](http://www.symfony-project.com/trac/wiki/InstallingSymfonyWithoutPear). Configuração do projeto ----------------------- No symfony, **aplicações** que compartilham o mesmo modelo de dados são reagrupadas em **projetos**. Para o projeto askeet, presumimos que existirá um frontend e um backend: que são duas aplicações diferentes. O projeto sendo o 'hospedeiro' das aplicações deve ser criado primeiro. Para fazer isso, tudo o que você precisa é de um diretório e do comando `symfony init-project`: $ mkdir /home/sfprojects/askeet $ cd /home/sfprojects/askeet $ symfony init-project askeet Agora é a hora de criar a aplicação frontend com o comando `symfony init-app`: $ symfony init-app frontend Uau, isto foi rápido. >**Nota**: Usuários do Windows são aconselhados a executar o symfony e configurar seus novos projetos em um caminho cujos nomes não contenham espaços - incluindo o diretório 'Documents and Settings'. Instalação do servidor web -------------------------- ### Configuração do servidor web Chegou a hora de alterar sua configuração do Apache para permitir que a nova aplicação fique acessível. Num contexto profissional, é melhor instalar a nova aplicação como um host virtual e é exatamente isso que vamos descrever aqui. De qualquer forma, se você preferir adicioná-la como um alias, veja os detalhes no capítulo [configuração do servidor web](http://www.symfony-project.com/cookbook/1_0/web_server) do livro. Abra o arquivo `httpd.conf` do seu diretório `Apache/conf/` e adicione ao final: ServerName askeet DocumentRoot "/home/sfprojects/askeet/web" DirectoryIndex index.php Alias /sf /usr/local/lib/php/data/symfony/web/sf AllowOverride All >**Nota**: o alias `/sf` deve apontar para o diretório do symfony que está dentro do diretório de dados(data) do PEAR. Para descobrir qual é o caminho, digite `pear config-show`. As aplicações symfony precisam "enchergar" este diretório para ter acesso a arquivos de imagem e javascript e desta forma executar corretamente a barra de ferramentas de debug e os helpers AJAX. No Windows, você precisa substituir a linha `Alias` por alguma coisa mais ou menos assim: Alias /sf "C:\php\pear\data\symfony\web\sf" ### Declare o nome do domínio O nome do domínio `askeet` precisa ser declarado localmente. Se você está num ambiente Linux, isso deve ser feito no arquivo `/etc/hosts`, mas se você está num ambiente Windows XP, este arquivo está localizado no diretório `C:\WINDOWS\system32\drivers\etc\`. Adicione a seguinte linha: 127.0.0.1 askeet >**Nota**: Você precisa ter privilégios de administrador para fazer isso. Se você não quer configurar um novo host, você deve adicionar uma declaração `Listen` para configurar o seu website em uma outra porta. Isto irá permitir que você utilize o domínio `localhost`. ### Teste a nova configuração Reinicie o Apache e verifique se você tem acesso à nova aplicação: http://askeet/ ![Congratulations](/images/askeet/congratulations.gif) >**Nota**: O symfony pode utilizar o módulo `mod_rewrite` para remover a parte /index.php/ da URL. >Se você não quer utilizar isso ou o seu servidor web não provê uma facilidade equivalente, você pode remover o arquivo `.htaccess` localizado no diretório `web/`. >Se a sua versão do apache não é compilada com o `mod_rewrite`, verifique se você tem o mod_rewrite DSO instalado e as seguintes linhas no seu `httpd.conf`: > > AddModule mod_rewrite.c > LoadModule rewrite_module modules/mod_rewrite.so > >Você vai aprender mais sobre URLs amigáveis no capítulo [roteamento](http://www.symfony-project.com/book/1_0/09-Links-and-the-Routing-System) do livro. Você deve tentar acessar a aplicação no ambiente de desenvolvimento. Experimente a seguinte URL: http://askeet/frontend_dev.php/ A barra de ferramentas de debug deve aparecer no canto superior direito, com pequenos ícones que comprovam que a sua configuração do `Alias sf/` está correta. ![Barra de ferramentas de debug](/images/askeet/web_debug1.gif) Mais uma vez, a configuração é um pouco diferente se você desejar executar o servidor IIS num ambiente Windows. Descubra como fazer isso no [tutorial específico](http://www.symfony-project.com/cookbook/1_0/web_server_iis). Subversion ---------- Um dos bons princípios de sujeitos preguiçosos é o de não se preocupar em quebrar o código existente. Como queremos trabalhar rápido, queremos poder reverter para uma versão anterior se uma modificação não foi eficiente, queremos permitir que mais de uma pessoa trabalhe no projeto e também queremos que você tenha acesso a todas as versões diárias da aplicação, adotaremos o sistema de controle de versão. Iremos utilizar o [Subversion][3] para isso. Consideramos que você já possui um servidor subversion instalado ou tenha acesso a um. Primeiramente, crie um novo repositório para o projeto `askeet`: $ svnadmin create $SVNREP_DIR/askeet $ svn mkdir -m "criacao do layout" file:///$SVNREP_DIR/askeet/trunk file:///$SVNREP_DIR/askeet/tags file:///$SVNREP_DIR/askeet/branches Em seguida, você deve importar primeiro, omitindo os diretórios temporários `cache/` e `log/`: $ cd /home/sfprojects/askeet $ rm -rf cache/* $ rm -rf log/* $ svn import -m "importacao inicial" . file:///$SVNREP_DIR/askeet/trunk Agora faça o checkout da versão do SVN e livre-se do diretório da aplicação original: $ cd /home/sfprojects $ mv askeet askeet.origin $ svn co file:///$SVNREP_DIR/askeet/trunk/ askeet/ $ ls askeet $ rm -rf askeet.origin Existe uma última coisa a ser feita. Se você comitar o seu diretório de trabalho para o repositório, você pode acabar copiando alguns arquivos indesejados, como aqueles localizados nos diretórios `cache` e `log` do seu projeto. Então você precisa especificar uma lista dos diretórios a serem ignorados pelo SVN desse projeto. $ cd /home/sfprojects/askeet $ svn propedit svn:ignore cache O editor de textos padrão configurado para o SVN será iniciado. Adicione os subdiretórios do `askeet` que o SVN deve ignorar ao comitar: * Salve e saia. Pronto. Repita o procedimento para o diretório log: $ svn propedit svn:ignore log * Agora, certifique-se de configurar as permissões corretas nos diretórios cache e logs para que o seu servidor web possa escrever neles novamente. Na linha de comando digite: $ chmod 777 cache $ chmod 777 log >**Nota**: Usuários do Windows podem utilizar o ótimo cliente [TortoiseSVN][4] para gerenciar o seu repositório do subversion. Se você quiser saber mais sobre o sistema de controle de versão, dê uma olhada no [capítulo criação do projeto](http://www.symfony-project.com/book/1_0/03-Running-Symfony) no livro do symfony. >**Nota**: O repositório askeet é público. Você pode acessá-lo no endereço: > > http://svn.askeet.com/ > >Experimente, faça o checkout. > >O código de hoje foi comitado, você pode fazer o checkout da tag `release_day_1`: > > $ svn co http://svn.askeet.com/tags/release_day_1/ askeet/ Até amanhã ---------- Bem, isso já durou uma hora! Nós falamos bastante, e não fizemos nada de novo para os entusiastas do symfony. Mas dê uma olhada no que será demonstrado no nosso segundo dia do calendário do advento do symfony: * o que a aplicação irá fazer * construindo o modelo de dados e gerando o mapeamento objeto-relacional * implementando o scaffolding em um módulo Enquanto isso, se você quiser manter-se informado sobre as novidades do askeet, você pode se [inscrever na lista de e-mails do askeet](mailto:askeet-subscribe@symfony-project.com) ou então visitar o [fórum específico](http://www.symfony-project.com/forum/index.php/f/8/). Não se esqueça de voltar amanhã! [1]: http://pear.php.net "Pear" [3]: http://subversion.tigris.org/ "Subversion" [4]: http://tortoisesvn.tigris.org/ "TortoiseSVN"