1. Programação para WEB
Regis Pires Magalhães
regispiresmag@gmail.com
Implementando a
Arquitetura MVC em
PHP
2. MVC – Modelo, Visão, Controlador
Model-view-controller (MVC) é um padrão de
arquitetura de software.
Para que serve?
Separar papéis para: reduzir a complexidade e
facilitar a manutenção, especialmente quando a
aplicação fica grande. Também facilita a divisão de
tarefas em uma equipe de trabalho.
Tornar aplicações mais flexíveis e extensíveis.
Permite inclusive a substituição da tecnologia de
uma camada sem afetar as demais.
3. MVC – Modelo, Visão, Controlador
Como surgiu?
Foi criado como padrão de projeto arquitetural
usado em interfaces de usuário na linguagem
Smalltalk.
5. MVC – Modelo, Visão, Controlador
Modelo
Refere-se aos dados da aplicação.
Pode usar mecanismos de armazenamento persistente
(bancos de dados) ou não.
Visão
Determina como o modelo vai ser mostrado ao usuário.
Controlador
Recebe interações do usuário e a partir delas, manipula o
modelo e determina a visão a ser usada.
Pode alterar o modelo ou apenas consultá-lo para
posterior apresentação deste modelo a partir de uma
determinada visão.
Em outras palavras, faz o “meio-de-campo” entre o modelo
e a visão.
6. Arquitetura MVC – Resumo
Modelos – Dados;
Visões – Como os dados são apresentados;
Controladores – Recebe entrada de dados
do usuário. Manipula o modelo e determina a
visão para exibição do modelo.
12. Exemplo 2 – MVC com Dispatcher
Usando um front-controller ou dispatcher
Há um controlador principal (index.php) que
despacha as requisições para controladores e
ações específicos.
Controladores e ações específicos são definidos
pelos parâmetros da URL do dispatcher:
http://localhost/mvc/index.php/pessoa/mostra
No nosso exemplo, o dispatcher:
Instancia o controlador especificado
Executa o método (ação) especificado do controlador
instanciado.
16. Problemas
Podemos enviar requisições que não passam
pelo dispatcher.
Seria mais interessante o dispatcher centralizar o
tratamento de todas as requisições.
Enviar repetidamente 'index.php' para acessar
o dispatcher deixa a URL longa e ainda
diminui sua legibilidade.
Seria melhor padronizarmos uma URL mais
resumida para definirmos o nome do controlador
e da ação.
17. Solução
Uma solução bastante interessante para os
problemas abordados é a reescrita de URL.
Com esse recurso podemos fazer a seguinte
convenção:
Para a URL: http://localhost/mvc/pessoa/mostra
Podemos dizer que:
mvc é um diretório da nossa aplicação
pessoa é o nosso controlador
mostra é a nossa ação que será executada no
controlador.
18. Reescrita de URL
Para usarmos reescrita de URL, precisamos habilitar
o módulo de reescrita do Apache:
No arquivo: C:xamppliteapacheconfhttpd.conf
descomente a seguinte linha:
LoadModule rewrite_module modules/mod_rewrite.so
Depois disso, criamos nossas regras de reescrita no
arquivo .htaccess no diretório raiz da aplicação:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
19. Reescrita de URL
No Ubuntu ainda é preciso alterar o AllowOverride
para All no arquivo /etc/apache2/sites-
available/default:
No XAMPP isso já vem habilitado.
...
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
...
20. Flags de reescrita
L – Last Rule
Pára o processo de reescrita e não aplica
regras adicionais.
Semelhante a um break do C, Java ou PHP.