Estrutura básica do framework MVC- Entendendo o padrão MVC na prática - Parte 02 Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 4 anos, 3 semanas, 1 dia atrás.

Este artigo é muito antigo ou seu conteúdo foi descontinuado, com certeza outro artigo foi escrito para substituí-lo, use o campo de pesquisa logo acima e desculpe o incomodo!

Agora que você já entendeu o que é MVC na primeira aula está na hora de dar um passo a frente e começar a fazer um framework um pouco mais elaborado.

Vou querer que o meu framework tenha as seguintes características:

  • A aplicação fique separada da biblioteca que faz o framework funcionar assim eu posso atualizar e organizar melhor as coisas
  • Quero que ele tenha suporte a URLs amigáveis com e sem htaccess
  • Quero que minha aplicação possa ser organizada em módulos, não confunda com Model, vamos entender aqui que módulos serão diretórios aonde irá ficar o MVC de cada seção (Seção Produtos, Clientes, Opiniões)
  • Ele terá um Model, Controller e View central, para eu poder escrever códigos que vão estar disponíveis para todos os outros MVCs da aplicação, assim vou escrever códigos uma vez só
  • Ter um diretório para montar uma biblioteca de recursos para o framework
  • Ter um CRUD simples com PDO

Estes são alguns pontos que quero implementar neste framework, outros podem ser implementados posteriormente, mas para esta série vamos nos ater a isso.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Montando a estrutura do nosso Framework

Para começar acesse a pasta do projeto anterior, lembra que criamos dois diretórios, framework-1 e framework-2, agora vamos usar a framework-2. Dentro vamos criar duas pastas App e Library, também vamos ter dois arquivos na raiz, o index.php e um .htaccess, no fim teremos a estrutura

  • App
  • Library
  • .htaccess
  • index.php

Dentro de App mais três pastas, Core, Modulos e Templates e dentro de Library uma estrutura assim:

  • Erik
    • Core
      • Master
        • Controller.php
        • Model.php
        • View.php
      • AutorLoad.php
      • Router.php
    • Utilities

Se você se perdeu, role até o fim do artigo e baixe o exemplo!

Bem, a PSR-0 estabelece que todo namespace deve ter um vendor, ou um "dono do pacote", o meu vai se chamar Erik já que o framework é meu, você pode usar o seu nome no seu, mas vai ter que lembrar de alterar isso em todos os códigos que eu passar e em todos os exemplos que eu colocar para download.

Detalhe: todos os nomes sem extensão php são diretórios (Utilities por exemplo), os com extensão, adivinha, são arquivos php (vai que alguém confunde, hehe).

Vou explicar, a pasta App vai abrigar todos os recursos que podem mudar de um projeto para outro, já a pasta Library vai conter todos os arquivos que não serão variáveis, ou seja, que vão ser alterados em todos os projetos, em outras palavras o coração da aplicação, ou como chamei acima, o Core.

Dentro de App teremos 3 diretórios, o Config que abrigará os arquivos responsáveis pelas configurações do projeto, como rotas e banco de dados, teremos apenas um arquivo aqui (por enquanto), o diretório Modulos vai guardar os diversos MVCs da aplicação e por fim o Templates, que irá conter os temas da aplicação (HTML, CSS, JS, Imagens e tudo mais que você precisar).

A pasta Librari/Erik/Core vai guardar os arquivos responsáveis para o bom funcionamento da aplicação, como o Router.php (que define as rotas), o AutoLoad.php que carrega os arquivos e o MVC principal.

Em Librari/Erik/Utilities teremos os "utilitários" da aplicação, as funções que nos ajudarão em determinadas tarefas como o inflector que vai cuidar das conversões de string e o request para tratar requisições.

O index.php vai chamar os recursos e definir as constantes principais de toda a aplicação ou seja, um arquivo de efeitos secundários e deve ter (por enquanto) apenas um <?php na primeira linha e nada mais (depois veremos ele com mais detalhes).

URLs amigáveis com e sem PHP

Eu quero que o nosso framework PHP tenha recurso de URLs amigáveis nativamente, por isso vou usar o $SERVER['PATHINFO'] do php aliado com htaccess. Para quem não conhece, o $_SERVER['PATH_INFO'] retorna o que é digitado após o arquivo php caminho depois da barra.

http://localhost/index.php/teste/de/path/info

No exemplo acima o arquivo que será aberto é o index.php e o que vem depois dele vai para o $SERVER['PATHINFO'], ou seja "/teste/de/path/info", só temos que ficar atentos para que isso esteja ativado no Apache, mas na maioria dos casos está, já que o CakePHP, por exemplo, usa isso para sua URLs, quer um exemplo melhor ainda pra entender, o Magento, melhor que esse exemplo não existe, quem já tentou ou usou sabe do que estou falando.

Se não estiver ativo no Apache, vá ao arquivo httpd.conf e adicione ou altere o AcceptPathInfo:

AcceptPathInfo = On

Vou levar em consideração que está ativado e funcionando.

Com isso em pronto e entendido podemos construir nosso .htaccess para enviar tudo o que for digitado para o nosso index.php, a não ser que exista um arquivo ou diretório naquele endereço.

Então:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Com isso já podemos usar o endereço "/qualquer/coisa" com e sem o index.php, note que não vamos usar o get para fazer as requisições de model, controller e view, pra você entender estes dois link vão para o mesmo lugar:

http://localhost/aula-blog-erik/framework-2/index.php/meu/path/info
http://localhost/aula-blog-erik/framework-2/meu/path/info

Note ali na primeira linha o index.php, esse é o link sem .htaccess e o segundo é com ele.

No 4º artigo (sem ser o próximo, depois) vamos criar uma classe que vai tratar as requisições da aplicação e consequentemente já retornar nosso $_SERVER['PATH_INFO'] e também ele já tratado para URL do framework, além do post, get, url base e tudo mais.

No próximo artigo vamos fazer nosso autoloader carregar arquivos nos diferentes diretórios da aplicação automaticamente.

Não esqueça de se cadastrar na Newsletter para saber quando o próximo artigo vai sair.

Aqui os arquivos desta aula e o estudo completo.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!