Development

sfBookPT-brMvcImplemExp

You must first sign up to be able to contribute.

Version 12 (modified by hpoyatos, 11 years ago)
--

Implementação MVC explicada (0.6.3)

Resumo

O framework symfony contempla as melhores práticas do desenvolvimento web, e especialmente o modelo MVC (Modelo/Visão/Controle). Este capítulo descreve o funcionamento geral e o paradigma it relies on.

Conceitos

A base do symfony é um design pattern web clássico, a arquitetura MVC, que possui três níveis:

  • O Modelo (Model) representa a informação onde a aplicação opera, sua lógica de negócio;
  • A Visão (View) renderiza o modelo em uma página navegável para a interação com o usuário;
  • O Controlador (Controller) responde pelas ações do usuário, e invoca mudanças no Modelo ou Visão se isso for apropriado;

No symfony, o Controlador é separado em diferentes partes, namely a front controller and a set of actions. Cada ação sabe como lidar com uma requisição específica. A Visão é separada em layouts, templates e "parciais" partials - todos estes são arquivos PHP que são acessados de acordo com o conteúdo definido na Ação. O Modelo oferece um camada de abstração para banco de dados e informação útil sobre a sessão e requisições.

Este modelo ajuda a trabalhar separadamente a lógica de negócio (Modelo) da apresentação (Visão). Por exemplo, se você precisa de uma aplicação que rode em ambos navegadores padrão e dispositivos portáteis como handhelds, você simplesmente precisa de uma nova Visão, mantendo os Controlador e Modelo originais. O Controle ajuda a esconder os detalhes dos protocolos usados para a requisição (HTTP, modo console, mail, etc.) do Modelo e da Visão. E o Modelo abstrai a lógica dos dados, o que torna a Visão e a Ação independente do, por exemplo, tipo de banco de dados usado pela aplicação.

Symfony implementa o modelo MVC de uma forma simples e limpa, fazendo com que os desenvolvedores tenham os benefícios de atalhos convencionados e programação ágil sem desnecessários slowdowns da aplicação.

Exemplo

Para tornar as coisas mais claras, veremos como a implementação symfony funciona em uma arquitetura MVC para uma inserção em um carrinho de compras.

1. Primeiro, o usuário interage com a interface de usuário, selecionando um produto e pressionando um butão; isso provavelmente validará o formulário e envia a requisição web para o servidor.

2. O controlador frontal então recebe a notificação de ação de usuário e, depois de executar procedures gerais desta requisição (considerações de roteamento, segurança, etc.), entende que isso deve passar para a ação do 'carrinho de compras'.

3. A ação 'carrinho de compras' acessa o Modelo, para atualizar o objeto 'carrinho' para a sessão do usuário.

4. Se a modificação do dado armazenado for realizada com sucesso, a ação prepara o conteúdo que deverá ser incluída na resposta - confirmation of the addition and complete list of products currently in the shopping cart. A lógica da 'Action' do 'carrinho de compras' especifica isso for a product addition, the content has to be included into a 'shopping cart' template.

5. A Visão então junta a resposta da 'Action' e com um template pré-formatado para produzir o código HTML da página de carrinho de compras.

6. Isso então é finalmente transferido para o servidor web que envia isso ao usuário, que será então utilizado pelo seu navegador para ler e interagir com a nova informação.

Classes Symfony

Os nomes das classes que são parte do pacote symfony possuem prefixo "sf". Você pode encontrar estas classes padrão em seu diretório de instalação symfony/lib.

sfAction
sfRequest
sfView
...

Se precisar inserir métodos customizados para estas classes em um determinado projeto, modifique as classes precedidas por "my" que podem ser encontrada no diretório myproject/apps/myapp/lib:

myAction
myRequest
myView
...

Estas classes herdam das classes "sf" seus atributos e métodos.

http://www.symfony-project.com/images/bubble.gif Nota: os nomes das classes do framework que serão chamadas durante a execução são especificadas no arquivo de configuração da aplicação factories.yml.