Caution: You are browsing the legacy symfony 1.x part of this website.
Cover of the book Symfony 5: The Fast Track

Symfony 5: The Fast Track is the best book to learn modern Symfony development, from zero to production. +300 pages in full color showing how to combine Symfony with Docker, APIs, queues & async tasks, Webpack, Single-Page Applications, etc.

Buy printed version

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

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

Abra o arquivo httpd.conf do seu diretório Apache/conf/ e adicione ao final:

<VirtualHost *:80>
  ServerName askeet
  DocumentRoot "/home/sfprojects/askeet/web"
  DirectoryIndex index.php
  Alias /sf /usr/local/lib/php/data/symfony/web/sf

  <Directory "/home/sfprojects/askeet/web">
   AllowOverride All
  </Directory>
</VirtualHost>

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

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

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.

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 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 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 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 ou então visitar o fórum específico.

Não se esqueça de voltar amanhã!