O calendário da chegada do symfony é um conjunto de 24 tutoriais sobre o passo-a-passo de como desenvolver 
um projeto do zero (neste caso chamada Askeet), publicados dia-a-dia entre primeiro de dezembro e o Natal.

É exatamente isso, todo dia um novo tutorial será publicado. Cada tutorial se foi projetado 
para ser concluído em 1 hora. Esta será a ocasião, para quem ainda não teve a experiência de 
ver o desenvolvimento de A a Z de uma aplicação web 2.0 em symfony.

A idéia é que na chegada do Natal a aplicação seja publicada, e o código fonte seja disponibilizado 
como open source. Esta aplicação será usável, interessante, útil e principalmente divertida.

Askeet dia 1: Iniciando o projeto

O objetivo do primeiro dia é mostrar uma página da aplicação no browser e configurar um ambiente de desenvolvimento profissional. Este último inclui a instalação do symfony, criação da aplicação, configuração do servidor web e integração com o sistema de controle de versão.

Iniciar »

Askeet dia 2: Setando o modelo de dados

O objetivo do segundo dia é definir qual será o resultado final em termos de funcionalidades, esboçar o modelo de dados, e começar a codificar. Isto também inclui gerar o mapeamento objeto-relacional e usá-lo interativamente para criar, recuperar e atualizar registros no banco com uma aplicação scaffolding.

Iniciar »

Askeet dia 3: Entrando na arquitetura MVC

O objetivo do terceiro dia é definir um layout melhor para o site, setar a lista de questões como sendo a página inicial, mostrar o número de usuários interessados por uma questão e popular a base a partir de um arquivo de texto com o intuito de ter dados de teste. Não é muito a fazer, mas um monte de leitura e compreensão a espera.

Iniciar »

Askeet dia 4: Refactoring

Os objetivos do quarto dia são mostrar uma lista de respostas para as perguntas, fornecer uma URL mais légivel para a página de visualização da pergunta, criar uma classe e adicionar à aplicação e mover alguns pedaços de código para um lugar melhor (Refactoring). Isto deve lhe ajudar a entender o conceito de template, modelo, política de roteamento e refactoring. Você deve pensar que é muito cedo para reescrever código que foi de apenas alguns dias atrás, mas veremos como se sentirá no fim desse tutorial.

Iniciar »

Askeet dia 5: Formulários e paginação

Os objetivos do quinto dia é permitir que o usuário logue e paginar a lista de questões na home. Será um desenvolvimento rápido, mas permitirá que você reveja alguns conceitos do tutorial de ontem.

Iniciar »

Askeet dia 6: Segurança e validação de formulários

Durante o quinto dia, você pôde manipular templates e ações; formulários e paginações não são mais segredos. Mas depois de construir o formulário de login, você provavelmente esperava aprender como restringir o acesso a usuários não autorizados para uma quantidade expecífica de funcionalidades. Isto é o iremos fazer hoje, junto com algumas validações de formulário.

Iniciar »

Askeet dia 7: model and view manipulation

Hoje, nós iremos mostrar uma lista com as últimas perguntas e as últimas respostas postadas, uma lista de usuários interessados em uma pergunta, o perfil de um usuário, e nós iremos adicionar uma barra de navegação em cada página para acessar essas funcionalidades. Porque isto não é muito trabalho para uma hora, nós iremos, também, ajustar a configuração do view e rever o que foi feito durante esta semana.

Iniciar »

Askeet dia 8: Interações AJAX

Se a base para a manipulação de dados na web foi por muito tempo formulários, hoje, as técnicas AJAX e a otimização da usabilidade podem modificar a forma como uma aplicação é construída. E isso aplica-se a Askeet também. Este tutorial irá lhe mostrar como adicionar interações AJAX-otimizadas para a Askeet. O objetivo é permitir que um usuário registrado declare seu interesse em uma pergunta.

Iniciar »

Askeet dia 9: local improvements

Durante o dia 8, nós adicionamos interações AJAX ao askeet sem dores. A aplicação está, agora, bem utilizável, mas poderia ter algumas melhoras. Rich text deveria ser permitido nas perguntas body, listas potencialmente longas deveriam ser paginadas, e chaves primárias não deveriam aparecer nas URIs. Tudo isso não é difícil de fazer com o symfony: hoje será uma boa ocasião para praticar o que você já aprendeu, e para avaliar que você sabe como manipular todas as camadas da arquitetura MVC.

Iniciar »

Askeet dia 10: Modificar dados com formulários Ajax

Depois da revisão de ontem sobre técnicas já conhecidas, alguns de vocês estão famintos por interação. Exibir perguntas e listas formatadas ricamente, ainda que paginadas, não é suficiente para construir uma aplicação viva. E o coração do conceito askeet é permitir que qualquer usuário registrado formule uma nova pergunta, e qualquer usuário possa responder uma que já exista.

Iniciar »

Askeet dia 11: syndication feed

The askeet application is ready to be launched in a (early) beta stage. As a matter of fact, it could already seduce lots of users since the core features (ask questions, read answers, contribute new answers) are built. The trouble is that recurrent users will find it difficult to keep up-to-date with the latest events on the askeet website. You need to provide them with fresh news without effort, and there is a media for that: news feed. So let's add news feed to askeet today.

Iniciar »

Askeet dia 12: Emails

Symfony não é apenas páginas web, e o tutorial de hoje irá ilustrar isso novamente. Iremos enviar um email tirando vantagem da implementação MVC.

Iniciar »

Askeet dia 13: Tags

Web 2.0 applications have come out with a new way of organizing items: tags. Tags are words, just as categories are. But the differences are that there is no hierarchy of tags, and that an item can have several tags. While finding a cat with categories could prove cumbersome (animal/mammal/four-legged/feline/, or other mysterious category names), it is very simple with tags (pet+cute). Add to that the ability for all users to add tags to a given question, and you get the famous concept of folksonomy.

Iniciar »

Askeet dia 14: Tags, part II

There are two things that are left to do concerning tags, and they both sound quite 'web 2.0': the ability to add a new tag with an AJAX form, and the global askeet tag bubble. Are you ready to experience the agile development methods of symfony?

Iniciar »

Askeet dia 15: Testes unitários

Teste unitários são um dos maiores avanços na programação desde objeto orientação. Eles permitem um processo de desenvolvimento seguro, refactoring sem medo, e por muitas vezes podem substituir documentação, uma vez que explica claramente o que a aplicação deve fazer. Symfony suporta e recomenda testes unitários, e fornece ferramentas para tal. A visão geral destas ferramentas - e a adição de alguns testes unitários no askeet - ocupará muito o tempo de hoje.

Iniciar »

Askeet dia 16: Dia da preguiça

Depois de quinze horas de trabalho árduo, todos nós merecemos algum descanso. Portanto, decidimos declarar o décimo sexto dia como o dia da preguiça, porque descansar sempre é uma boa coisa quando estamos desenvolvendo aplicações web. Hoje não será publicado nenhum tutorial do symfony, mas há ainda muito o que aprender.

Iniciar »

Askeet dia 17: API

The askeet application was just put online yesterday. We have planned a handful of advanced web application development techniques to show you through askeet, and the first to be revealed today is the programming of an external API requiring an HTTP authentication.

Iniciar »

Askeet dia 18: Filtros

Vimos ontem como disponibilizar a askeet através de uma API XML. Hoje o programa irá forca-se nos filtros, e nos iremos ilustrar seu uso com a criação de sub-domínios para askeet. Por exemplo, 'php.askeet.com' exibirá apenas perguntas que possuem a tag PHP e qualquer nova pergunta postada neste domínio terá a tag 'php'. Vamos chamar esta novo recurso de 'universo askeet' e desenvolvê-lo imediatamento.

Iniciar »

Askeet dia 19: Performance and cache

The overhead caused by a framework is a general concern, especially if your site is hosted in a shared server. Although symfony doesn't slow down the server response time very much, you might want to see it yourself and tweak the code to speed up the page delivery. So today's tutorial will be focused on the performance measurement and improvement.

Iniciar »

Askeet dia 20: Administration and moderation

The advent calendar tutorials are supposed to talk about the development of a web application using agile methods. However, until now, we talked a lot about coding and not that much about application development, and the relations between the requirements of a client and the functionalities implemented. The backend need will be a good opportunity to illustrate what comes before coding in agile development.

Iniciar »

Askeet dia 21: Motor de busca

Se a extensão Zsearch (uma implementação em PHP da [Lucene search engine] http://lucene.apache.org/java/docs/) para o Apache já houvesse sido liberado pela Zend, esta seria uma parte do bolo para ser implementado. Infelizmente, a Zend parece examinar demais ao invés de lançar o seu framework PHP, então nos precisamos encontrar outra solução.

Iniciar »

Askeet dia 22: Transfer to production

Yesterday, we added a back-office to askeet. So everything is ready for the application to actually run and be released on the Internet. This is the perfect moment to focus on the techniques involved in the synchronization of two servers, since you developed askeet on your computer and will probably host it in another server, connected to the Internet.

Iniciar »

Askeet dia 23: Internacionalização

Agora que você aprendeu a transferir uma aplicação symfony para um host de produção, a aplicação askeet pode rodar em qualquer lugar. Mas e se alguém decidir usá-la em um país que não fala inglês, diga-se, França?

Iniciar »

Askeet dia 24: O que vem a seguir?

Por vinte e três dias, estivemos construindo uma aplicação web 2.0 em PHP5 com o framework symfony. Porém mais do que isso, askeet é um projeto open source, e o que vem a seguir é, felizmente, uma longa história.

Iniciar »