Development

Documentation/pt_BR/book/1.0/01-Introducing-Symfony

You must first sign up to be able to contribute.

Version 7 (modified by alan.gustavo, 10 years ago)
--
Capítulo 1 - Introdução ao Symfony
==================================

O que o symfony pode fazer por você? O que é necessário para usá-lo? Este capítulo responde estas perguntas.

Symfony em Resumo
-----------------

Um framework basicamente é uma aplicação desenvolvida para automatizar muitos dos processos empregados para um determinado fim. O framework deve também estruturar o código, criando uma base para o desenvolvedor escrever melhor, mais legível, e de fácil manutenção. Finalizando, um framework torna a programação mais fácil, uma vez que empacotada tarefas mais complexas  dentro de declarações simples.

Symfony é um framework completo concebido para otimizar o desenvolvimento de aplicações web através de uma série de funcionalidades-chave.
Para iniciantes, ele separa regras de negócio, lógica de servidor, e visão apresentação de uma aplicação web. Ele contém inúmeras ferramentas e classes com o intuito de reduzir o tempo de desenvolvimento de uma complexa aplicação web. Adicionalmente, ele automatiza tarefas comuns para que o desenvolvendo possa focar-se inteiramente nas particularidades de uma aplicação. O resultado final destas vantagens significa deixar de reinventar a roda toda vez que uma nova aplicação web for construída!

Symfony foi escrito inteiramente em PHP 5. Foi exaustivamente testado em vários projetos reais, sendo atualmente usado em websites e-business de alta demanda. É compatível com a maioria dos bancos de dados disponíveis, incluindo MySQL, PostgreSQL, Oracle e Microsoft SQL Server. Roda em plataformas *nix e Windows. Vamos dar uma boa olhada em suas funcionalidades.

### Funcionalidades do Symfony

Symfony foi construído de forma a preencher os seguintes requisitos:

 * Fácil de instalar e configurar na maioria das plataformas (é funcional em plataformas padrão *nix e Windows)
 * Independente de qualquer bancos de dados
 * Simples de usar, na maioria dos casos, mas ainda sim flexível o bastante para se adaptar em casos complexos
 * Baseado na premissa de convenção na configuração -- o desenvolvedor precisa configurar apenas o que não for convencional
 * Compatível com a maioria das melhores práticas web e design patterns
 * "Enterprise ready" - adaptável para políticas e arquiteturas de tecnologia da informações (TI) existentes e estável o suficiente para projetos longos.
 * Código muito legível, com comentários padrão phpDocumentor, para fácil manutenção
 * Fácil de estender, permitindo integração com outras bibliotecas distribuídas por terceiros.

#### Funcionalidades Automatizadas para Projetos Web

Muitas das mais comuns funcionalidades em projetos web são automatizadas através do symfony, como:

 * Uma camada embutida de internacionalização permite tradução de dados e interface, assim como a localização do sistema.
 * A camada de apresentação utiliza templates e layouts que podem ser construídos por webdesigners que não possuem qualquer conhecimento sobre o framework. Assistentes (Helpers) reduzem drasticamente o código na apresentação, encapsulando grandes porções de código em simples chamadas de funções.
 * Formulários suportam validação e repopulação automáticas, e isto garante uma boa qualidade dos dados na base de dados e uma melhor experiência para o usuário.
 * Previne ataques derivados de dados corrompidos.
 * A funcionalidade de gerenciamento de cache reduz uso de banda e processamento do servidor.
 * Autenticação e funcionalidades de credenciamento facilitam a criação da áreas restritas e o gerenciamento de segurança dos usuários.
 * Roteamento e URLs inteligentes tornam os endereços das páginas parte da interface e amigáveis para mecanismos de busca.
 * As característica inclusas e-mail e gerenciamento da API permitem às aplicações web ir além das interações clássicas de navegador.
 * Listagens são mais amigáveis graças aos recursos de paginação, ordenação e filtragens automáticas.
 * Contrutores (Factories), plug-ins, e mixins provém um alto nível de extensibilidade.
 * Interações Ajax são fáceis de implementar graças aos assistentes (helpers) que encapsulam efeitos JavaScript.

#### Ambiente de Desenvolvimento e Ferramentas

Para preencher os requisitos que as empresas possuem para criar seus códigos e regras de gerenciamento de projetos, symfony pode ser inteiramente customizado. Disponibiliza por padrão, diversos ambientes de desenvolvimento e já contem múltiplas ferramentas que automatizam tarefas comuns de engenharia de software:

 * As ferramentas de geração de código são ótimas para protótipos e back-ends administrativos.
 * O framework de testes embutido provem ferramentas perfeitas para testes durante o desenvolvimento
 * O painel de debug acelera a depuração, disponibilizando todas as informações que o desenvolvedor precisa na mesma página em que ele está trabalhando.
 * A interface em linha de comando automatiza a produção da aplicação entre dois servidores.
 * Mudanças de configuração em tempo real são possíveis e efetivas.
 * As funcionalidades de log dão a administradores detalhes completos sobre as atividades de uma aplicação.

### Quem criou o Symfony e por que?

A primeira versão do symfony foi lançada em Outubro de 2005 pelo fundador do projeto Fabien Potencier, co-autor deste livro. Fabien é o CEO da Sensio ([http://www.sensio.com/](http://www.sensio.com/)), uma produtora web francesa conhecida por sua visão inovadora em desenvolvimento web.

Anos antes, em 2003, Fabien levou algum tempo analisando as ferramentas de desenvolvimento em código aberto existentes para aplicações web em PHP. Constatou que nenhuma delas preenchia os requisitos descritos anteriormente. Quando o PHP 5 foi lançado, ele decidiu que as ferramentas disponíveis tinham alcançado maturidade o suficiente para integrá-las em um framework completo. Ele levou um ano desenvolvendo o núcleo do symfony, baseando seu trabalho no framework Mojavi Model-View-Controller (MVC), um mapeador objeto-relacional (ORM) chamado Propel, e os assistentes (helpers) para templates do Ruby on Rails.

Fabien concebeu originalmente o symfony para os projetos da Sensio, porque possuir um framework eficiente à sua disposição representava o caminho ideal para desenvolver aplicações rapidamente e com maior eficiência. Isso ainda tornou o desenvolvimento web mais intuitivo, resultando em aplicações mais robustas e mais fáceis de se manter. O framework provou que estava pronto para uso quando foi empregado para construir um e-commerce para um varejista de lingerie, e foi aplicado subseqüentemente a outros projetos

Após usar o symfony em alguns projetos com sucesso, Fabien decidiu lançar-lo com uma licença de código aberto. Doou seu projeto à comunidade, para ser beneficiado pelo feedback dos usuários, mostrar a experiência da Sensio, e porque isto é divertido.

>**Note**
>Por que "symfony" e não "FooBarFramework"? Porque Fabien queria um nome curto contendo um s, de Sensio, e um f de framework, fácil de lembrar e algo que não fosse associado com outra ferramenta de desenvolvimento. Além disso, ele não gosta de letras maiúsculas. Symfony é o mais próximo disso, apesar de não ser completamente em inglês, e também estava disponível como um nome de projeto. A outra alternativa seria "baguette."


Para que o symfony se tornasse um projeto código aberto de sucesso, deveria possuir uma documentação extensa em inglês, para aumentar sua adoção. Fabien pediu ao empregado da Sensio François Zaninotto, e também co-autor deste livro, que mergulhasse no código e escrevesse um livro online sobre ele. Isso levou um tempo, mas quando o projeto tornou-se público, ele estava bem documentado o bastante para atender a um grande número de desenvolvedores. O resto é história.

### A comunidade Symfony

Assim que o website do symfony ([http://www.symfony-project.com/](http://www.symfony-project.com/)) foi lançado, um grande número de desenvolvedores ao redor do mundo baixaram a instalaram o framework, leram a documentação online, e construíram suas primeiras aplicações com o symfony, e o barulho foi geral.

Frameworks de aplicações Web estavam se tornando populares na época, e a necessidade de um framework completo em PHP era grande. Symfony tornara-se uma solução obrigatória devido ao sua impressionante qualidade de código e sua considerável quantidade de documentação -- suas duas maiores vantagens em relação às outras alternativas na categoria "framework". Contribuidores rapidamente apareceram, propondo correções e melhorias, colocando a documentação à prova, e realizando outras tarefas importantes.

O repositório público dos fontes e o sistema de tickets possibilitam variadas formas de contribuir, e todos os voluntários são bem-vindos. 	
Fabien é ainda o principal responsável (committer) pelo repositório do código fonte, e isto garante a qualidade do código.

Atualmente, o fórum do symfony, listas de discussão, e o canal de IRC oferecem suporte ideais, com cada questão tendo aproximadamente uma média de quatro respostas. Novos usuários instalam symfony todos os dias, o wiki e a seção "Code Snippets" contem muitas contribuições de usuários e documentações. O número de aplicações conhecidas que utilizam symfony cresce em um ritmo de cinco por semana, sem parar.

A comunidade symfony é a terceira força da estrutura, e nós esperamos que você se junte após ter lido este livro.

### O Symfony é pra mim?

Seja você um expert em PHP 5 ou um iniciante em programação para web, você está apto para usar o symfony. O fator de decisão determinante entre usar ou não usar deve ser o tamanho do seu projeto.

Se você deseja desenvolver um simples website de 5 a 10 páginas, poucos acessos ao banco de dados, e sem quaisquer obrigações em assegura performance ou disponibilizar documentação, então você deve usar apenas o PHP. Você não terá um ganho fazendo uso de um framework para aplicações web, e usar orientação à objetos ou um modelo MVC provavelmente só iria atrasar seu desenvolvimento. Um aviso, symfony não é otimizado para rodar eficientemente em um servidor compartilhado onde scripts PHP só possam rodar usando o modo "Common Gateway Interface" (CGI).

Por outro lado, se você deseja desenvolver aplicações web mais complexas, carregado de regras de negócio, apenas PHP não é o bastante. Se planeja manter ou estender sua aplicação no futuro, vai precisar de um código leve, legível e eficiente. Se deseja utilizar últimos avanços em interatividade com usuários (como Ajax) de forma intuitiva, você não pode simplesmente codificar centenas de linhas em JavaScript. Se deseja desenvolver de forma rápida e divertida, então apenas PHP será provavelmente decepcionante. Por todas estas razões, symfony é para você.

E, claro, se você já é um desenvolver web profissional, já conhece todos os benefícios de frameworks para aplicações web, e está procurando um maduro, bem documentado, e com uma grande comunidade de usuários, não procure mais, porque o symfony é sua solução.

>**TIP**
>Se você prefere uma demonstração mais visual, dê uma olhada nos vídeos (screencasts) disponíveis no website do symfony. Você verá como é fácil e divertido desenvolver aplicações com o symfony.

Conceitos Fundamentais
----------------------

Antes de começar com o symfony, você precisa entender alguns conceitos básicos. Sinta-se à vontade para pular o capítulo se você já conhecer o conceito de OOP, ORM, RAD, DRY, KISS, TDD, YAML, e PEAR.

### PHP 5

Symfony é desenvolvido em PHP 5 ([http://www.php.net]) e concebido para construir aplicações web com esta mesma linguagem. Entretanto, um entendimento sólido sobre PHP 5 é necessário para extrair o melhor deste framework.

Desenvolvedores que já conhecerem PHP 4 mas não PHP 5 devem se focar no novo modelo orientado à objetos.

### Programação Orientada à Objetos (OOP)

Programação Orientada à Objetos (OOP) não será explicada neste capítulo. Seria necessário todo o livro para isso! Por causa da extensibilidade do symfony ser realizada usando os mecanismos orientados à objetos presentes no PHP 5, OOP é portanto um pré-requisito para aprender symfony.

Wikipedia explica OOP da seguinte maneira:

A idéia por trás da programação orientada à objetos é que o programa de computador deve ser compreendido com uma coleção unidades individuais, ou objetos, que interagem uns com os outros, em oposição à visão tradicional em que um programação é visto como uma coleção de funções, ou simplesmente como uma lista de instruções para o computador.

PHP 5 implementa paradigmas de orientação à objetos como classe, objeto, método, herança, e muitos outros. Aqueles que não estiverem familiarizados à estes conceitos, são advertidos a ler a documentação PHP relacionada, disponível em [http://www.php.net/manual/pt_BR/language.oop5.basic.php](http://www.php.net/manual/pt_BR/language.oop5.basic.php).

### Métodos Mágicos

Uma das vantagens dos objetos em PHP é a capacidade de utilizar os métodos mágicos (magic methods). São métodos que podem ser utilizados para sobrescrever o comportamento padrão das classes sem modificar o código externo. Eles fazem a sintaxe do PHP menos redundante e mais flexível . São fáceis de se identificar, porque seus nomes começam com dois underscores (`__`).

Por exemplo, quando exibirmos um objeto, o PHP automaticamente olha para o método `__toString()` deste objeto para verificar se há um formato de exibição customizado definido pelo desenvolvedor:

    [php]
    $myObject = new myClass();
    echo $myObject;
    // Will look for a magic method
    echo $myObject->__toString();

Symfony utiliza métodos mágicos, portanto você deve possuir um entendimento sobre eles. Eles são descritos na documentação do PHP ([http://www.php.net/manual/pt_BR/language.oop5.magic.php](http://www.php.net/manual/pt_BR/language.oop5.magic.php)).

### Repositório de Aplicações e Extensões PHP (PEAR)

PEAR é "um framework e sistema de distribuição para componentes PHP reutilizáveis." PEAR lhe permite baixar, instalar, atualizar, e desinstalar scripts PHP. Quando você faz uso de um pacote PEAR, não precisa se preocupar onde colocar os scripts, como torná-los disponíveis, ou como extender a interface de linha de comando (CLI).

PEAR é um projeto controlado pela comunidade, escrito em PHP e distribuído em conjunto aos pacotes padrões PHP.

>**TIP**
>O website do PEAR, [http://pear.php.net/](http://pear.php.net/), provém documentação e pacotes agrupados por categorias.

PEAR é a maneira mais profissional de instalar bibliotecas de terceiros no PHP. Symfony recomenda o uso do PEAR para manter um ponto central de instalação, utilizando-o em múltiplos projetos ao mesmo tempo. Os plug-ins do symfony são pacotes PEAR com uma configuração especial. O próprio framework symfony está disponível na forma de um pacote PEAR.

Você não precisa saber à respeito da sintaxe PEAR para utilizar o symfony. Você só precisa entender o que ele faz e tê-lo instalado. Você pode verificar se o PEAR está instalado em seu computador, digitando o seguinte comando em seu terminal:

    > pear info pear


O comando irá retornar o número da versão do PEAR instalado.

O projeto symfony possui seu próprio repositório (ou canal) PEAR. Repare que estes canais estão disponíves a partir da versão 1.4.0 do PEAR, portanto você deve atualizá-lo se sua versão for mais antiga. Para atualizar sua versão de PEAR, digite o seguinte comando:

    > pear upgrade PEAR


### Mapeamento Objeto-Relacional (ORM)

Bancos de Dados são relacionais. PHP 5 e symfony são orientados à objeto. Para possibilitar um acesso ao banco de dados de uma forma orientada à objeto, é necessária uma interface traduzindo a lógica de objetos para a lógica relacional. Esta interface é chamada de mapeamento objeto-relacional, ou ORM.

Um ORM é feito para objetos terem acesso às informações e manter regras de negócio entre eles mesmos.

Um dos benefícios de uma camada de abstração objeto-relacional é a prevenção no uso de sintaxes específicas de um determinado tipo de banco de dados. Ele automaticamente traduz chamadas de um modelo de objetos para consultas SQL otimizadas para o banco de dados atual.

Isso significa que substituir um tipo de banco de dados por outro no meio do projeto é fácil. Imagine uma situação em que você precisa escrever um protótipo rápido para uma aplicação, mas seu cliente ainda não se decidiu qual banco de dados é melhor para suas necessidades. Você pode começar construindo sua aplicação em SQLite, por exemplo, e mudar para MySQL, PostgreSQL, ou Oracle quando o cliente estiver pronto para decidir. Apenas mude uma linha no arquivo de configuração, e pronto.

Uma camada de abstração encapsula a lógica de dados. O restante da aplicação não precisa realizar consultas SQL, e os SQLs que acessam o banco ficam fáceis de se encontrar. Desenvolvedores especializados em programação em banco de dados também saberão claramente onde trabalhar.

Usar objetos no lugar de registros, e classes no lugar de tabelas, traz ainda um benefício adicional: você pode implementar novos acessos à suas tabelas. Por exemplo, se você tem uma tabela chamada Cliente com dois campos, `PrimeiroNome` e `SobreNome`, você pode pedir apenas por uma informação chamada `Nome`. No mundo orientado à objetos, isso é tão fácil, bastando simplesmente adicionar um método de acesso na classe `Cliente`, desta forma:

    [php]
    public function getName()
    {
      return $this->getFirstName().' '.$this->getLastName();
    }


Todas as funções repetitivas de acesso a dados e a lógica de negócio dos dados podem ser mantidas dentro dos objetos. 	
Por exemplo, considerar uma classe `ShoppingCart` em que você mantem os artigos (que são objetos). 	
Para obter o valor total do carrinho de compras para o pagamento, você pode adicionar um método `getTotal()`, como este: 

    [php]
    public function getTotal()
    {
      $total = 0;
      foreach ($this->getItems() as $item)
      {
        $total += $item->getPrice() * $item->getQuantity();
      }
      return $total;
    }

E é tudo isso. Imaginar quanto tempo requereria para escrever uma consulta SQL que faz a mesma coisa!  

Propel, outro projeto de código aberto, é atualmente uma das melhores camadas de abstração objeto/relacional para PHP 5. Symfony integra Propel por dentro do framework, assim a maioria da manipulação de dados descrita neste livro segue a sintaxe do Propel. Este livro descreverá como usar os objetos do Propel, mas para uma referência mais completa, uma visita ao website do Propel [http://propel.phpdb.org/trac/](http://propel.phpdb.org/trac/) é recomendada.

### Desenvolvimento rápido de aplicações (RAD)

Programar aplicações web pode muitas vezes ser um trabalho tedioso e lento. Depois dos ciclos de vida usuais da engenharia de software (como proposto pelo Rational Unified Process, por exemplo), o desenvolvimento de aplicações web não poderia começar antes que um jogo completo das exigências esteja escrito, os muitos de diagramas de classes (UML) forem desenhados, e as toneladas da documentação preliminar foram produzidas. Isto era devido à velocidade geral do desenvolvimento, à falta da versatilidade das linguagens de programação (você teve que construir, compilar, reiniciar, e quem sabe o que mais antes de realmente ver seu programa funcionando), e sobretudo, ao fato que os clientes eram completamente razoáveis e não mudavam suas mentes constantemente. 

Hoje, o negócio move-se mais rapidamente, e os clientes tendem a mudar constantemente suas mentes no curso do desenvolvimento do projeto. 	
Naturalmente, esperam que a equipe de desenvolvimento adapte-se a suas necessidades e modifique rapidamente a estrutura da aplicação. Felizmente, o uso de linguagens scripting como o Perl e o PHP permitem facilmente aplicar outras estratégias de programação, como o desenvolvimento rápido de aplicações (RAD) ou o desenvolvimento ágil do software. 

Uma das idéias destas metodologias é começar o desenvolvimento o mais cedo possível de modo que o cliente possa ver um protótipo trabalhando e oferecer uma direção adicional. Então a aplicação começa construída em um processo iterativo, liberando versões cada vez mais completas em ciclos de desenvolvimento curtos. 

As conseqüências para o desenvolvedor são numerosas. Um colaborador não necessita pensar sobre o futuro ao implementar uma característica. 	
O método usado deve ser tão simples e direto como possível. Isto é ilustrado bem pela máxima do princípio do KISS: Mantenha isto estupidamente simples(Keep It Simple, Stupid). 

Quando as exigências evoluem ou quando uma característica é adicionada, o código existente geralmente tem que em parte ser reescrito. Este processo é chamado refactoring, e acontece muito no curso de um desenvolvimento da aplicação web. O código é movido para outros lugares de acordo com sua natureza. As parcelas duplicadas do código são refeitas para um único lugar, assim pode-se aplicar o principio DRY (Don't Repeat Yourself).

E para certificar-se de que a aplicação continuará funcionando quando é mudada constantemente, ela necessita de unidades de teste que podem ser automatizados. Se bem escrito, as unidades de testes são uma maneira contínua de se assegurar que nada seja quebrado adicionando ou modificando o código. Algumas metodologias de desenvolvimento estipulam mesmo testes da escrita antes de codificar, isso é chamado o desenvolvimento teste-dirigido (TDD). 

Há muitos outros princípios e hábitos bons hitos para o desenvolvimento ágil. Uma das metodologias ágeis mais eficazes no desenvolvimento é chamado Extreme Programming (abreviado como XP), e a literatura do XP lhe ensinará muito sobre como desenvolver uma aplicação de uma maneira rápida e eficaz. 	
Um bom lugar para começar é os livros da série de XP do Kent Beck (Addison-Wesley). 

Symfony is the perfect tool for RAD. As a matter of fact, the framework was built by a web agency applying the RAD principle for its own projects. This means that learning to use symfony is not about learning a new language, but more about applying the right reflexes and the best judgment in order to build applications in a more effective way.

	
Symfony é a ferramenta perfeita para o RAD. De fato, o framework foi construído por uma agência web que aplica o princípio do RAD para seus próprios projetos. Isto significa que aprender usar symfony não é sobre a aprender uma linguagem nova, mas sobre aplicar os reflexos direitos e o melhor julgamento a fim construir aplicações em uma maneira mais eficaz. 

O Web site do symfony propõe um tutorial passo a passo que ilustra o desenvolvimento de uma aplicação em uma maneira ágil. É chamado askeet [http://www.symfony-project.com/askeet](http://www.symfony-project.com/askeet), e é leitura recomendada para aqueles que querem aprender mais sobre o desenvolvimento ágil. 

### YAML

De acordo com o Web site oficial do YAML ([http://www.yaml.org/](http://www.yaml.org/)), YAML é “um formato parseavel de serialização de dados da máquina projetado para a legibilidade humana e a interação com linguagens scripting”. Pôr outro lado, YAML é uma língua muito simples usada para descrever dados como na maneira do XML mas com uma sintaxe muito mais simples. É especialmente útil para descrever os dados que podem ser traduzidos em arrays e hashes, como este: 

    [php]
    $house = array(
      'family' => array(
        'name'     => 'Doe',
        'parents'  => array('John', 'Jane'),
        'children' => array('Paul', 'Mark', 'Simone')
      ),
      'address' => array(
        'number'   => 34,
        'street'   => 'Main Street',
        'city'     => 'Nowheretown',
        'zipcode'  => '12345'
      )
    );


Esta array PHP pode ser automaticamente criada pelo parsing do seguinte documento YAML: 

    house:
      family:
        name:     Doe
        parents:
          - John
          - Jane
        children:
          - Paul
          - Mark
          - Simone
      address:
        number: 34
        street: Main Street
        city: Nowheretown
        zipcode: 12345

	
Em YAML, a estrutura é mostrada através da identação, os itens de seqüência são denotados por um traço, e os pares da chave/valor dentro de um mapa são separados por dois pontos. YAML tem também uma sintaxe curta para descrever a mesma estrutura com poucas linhas, onde arrays são mostradas explicitamente com [] e hashes com {}. Conseqüentemente, os dados YAML anteriores podem ser escritos em uma maneira mais curta, como segue: 

    house:
      family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
      address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

	
YAML é um acrônimo para "Yet Another Markup Language". O formato foi criado por volta de 2001, e os parsers YAML existem para uma grande variedade de linguagens. 

>**TIP**
>As especificações do formato YAML estão disponíveis em [http://www.yaml.org/](http://www.yaml.org/).

As you can see, YAML is much faster to write than XML (no more closing tags or explicit quotes), and it is more powerful than .ini files (which don't support hierarchy). That is why symfony uses YAML as the preferred language to store configuration. You will see a lot of YAML files in this book, but it is so straightforward that you probably don't need to learn more about it.

	
Como você pode ver, YAML é muito mais rápido escrever do que XML (não precisa de Tags de fechamento ou citações explícitas), e é mais poderoso do que os arquivos .ini (que não suportam hierarquia). 	
Isso é porque symfony usa YAML como a linguagem preferida para armazenar a configuração. Você verá muitos arquivos YAML neste livro, por enquanto você não necessita aprender mais sobre ele. 

Sumário
-------

Symfony é um framework para aplicação web em PHP 5. Adiciona uma camada nova no alto da linguagem PHP, fornecendo as ferramentas que aumentam a velocidade  do desenvolvimento de aplicações web complexas. Este livro falará sobre ele, e é necessario você estar familiarizado com os conceitos básicos da programação moderna orientada a objeto (OOP) para compreendê-la, mapas objeto-relacional (ORM), e desenvolvimento rápido da aplicações (RAD). O único fundo técnico requerido é conhecimento de PHP 5.