Sei sulla pagina 1di 20

Construindo o seu próprio MVC sem utilização

de Framework com PHP


Aplicação Sistema de Notícias

Esta aplicação será estruturada no conceito de MVC (Model-View-


Controller), que é uma arquitetura de software ou padrão de design, que
é usado em engenharia de software onde a mesma é aplicada em
diversos frameworks de PHP como por exemplo: CakePHP, Yii Framework,
Laravel entre outros.

Para que possamos entender melhor o que é o MVC, vamos falar de


cada uma das camadas:

Primeiramente uma das maneiras simples de pensar sobre isso seria


considerar o seguinte cenário:

 Um usuário interage com a View - clicando em um link ou enviando


um formulário.
 O Controller controla a entrada do usuário e transfere as
informações para o modelo
 O Model recebe as informações e atualiza seu estado (adiciona
dados a um banco de dados, por exemplo, ou realizar as
validações)
 A View verifica o estado do Model e responde em conformidade
(listando os dados recém-inseridos)
 A Visualização aguarda outra interação do usuário.

Mas o que isso significa para você e por que você deveria considerar usá-
lo?

A ideia de que você separe a lógica da visualização, a apresentação e


o layout do código são mais simples, tornando sua aplicação mais
sustentável. A exibição está nos arquivos de visualização (view), a lógica
no modelo (model) e o controlador (controller) controla todos eles.

Model

O Model é responsável pelo armazenamento dos dados usados no


projeto geral. Ele deve permitir o acesso os dados.

Um aspecto importante do Modelo é que é tecnicamente "cego" por


isso, o modelo não tem conexão ou conhecimento do que acontece
com os dados quando ele é passado para View ou Controller. Nem
chama nem busca uma resposta das outras partes. Seu único objetivo é
processar dados armazenar ou procurar e preparar dados para serem
transmitidos para as outras partes.

View

A View é onde os dados serão visualizados. Tradicionalmente, em uma


aplicação web criada usando o MVC, o View é a parte do sistema onde
o HTML é gerado e exibido.

"É importante notar que, para aplicar corretamente a arquitetura MVC,


não deve haver interação entre Model e View: toda a lógica é tratada
pelos Controllers"
Controller

O componente principal da aplicação. Seu trabalho é manipular dados


que o usuário insere ou envia, atualizando o Model. Sem interações do
usuário, o controller não tem nenhum propósito. É a única parte do
padrão com o qual o usuário deve estar interagindo.

Agora que sabemos a responsabilidades de cada um, vamos a nossa


estrutura de pastas da nossa aplicação.

1. Preparando o Ambiente

Para construir a nossa aplicação utilizaremos o xampp como nosso


webserver, realize o download no link abaixo e execute sua instalação:

https://www.apachefriends.org/pt_br/index.html

1.1 Configurando o VirtualHost

Para facilitar a execução do nosso projeto, vamos criar um VirtualHost,


pois através desta função podemos indicar onde nosso projeto está em
nosso sistema.

Abra o arquivo da pasta “c:/xampp/apache/conf/extra/httpd-


vhosts.conf”, no visualCode ou um programa de sua preferência .

Adicione o seguinte código no final do arquivo:


###dev.projetoloja.com###
<VirtualHost *>
ServerName dev.sistemanoticia.com
DocumentRoot "c:\ServerWeb\SISTEMA_NOTICIA"
ErrorLog "logs/sistemanoticia-error.log"
CustomLog "logs/sistemanoticia-access.log" common
<Directory " c:\ServerWeb\SISTEMA_NOTICIA ">
AllowOverride All
Require all granted
Options Indexes FollowSymLinks
</Directory>
</VirtualHost>

As configurações em vermelho, são as configurações do endereço da


URL e o caminho da pasta do seu projeto na sua máquina.
ServerName = Seria a URL do seu projeto, é como digitaremos no
navegador. http://dev.sistemanoticia.com
DocumentRoot e Directory= É o caminho da pasta do projeto.
Crie uma pasta no (c:\) com o nome ServerWeb e dentro dela uma
outra com o nome SISTEMA_NOTICIA.
Caso queira mudar o caminho pode ficar à vontade, só lembre
que tem que mudar o DocumentRoot e Directory no httpd-vhosts.conf

Agora devemos configurar o arquivo de host, lembrando que isto é valido


para configuração de domínio virtual Windows.
Abra o arquivo host localizado em C:\WINDOWS\system32\drivers\etc\
(este arquivo precisa de permissão para alteração, clique com o botão
direito sobre ele > propriedades > segurança. Edite e aplique todas as
permissões dos usuários)
No fim deste arquivo adicione o nome do domínio em conjunto com o IP.
127.0.0.2 dev.sistemanoticia.com
Restarta o xampp e execute o teste no navegador digitando o endereço:

http://dev.sistemanoticia.com
1.2 Estrutura de Pastas da nossa aplicação Sistema Noticia

Pasta Principal do Projeto


Pasta da Aplicação
Conterá as Classes de Controle da Aplicação

Conterá as Classes de Model da Aplicação

Conterá os arquivos responsáveis da visualização

Conterá os arquivos de carregamento da aplicação

Arquivos de CSS estilização do Layout

Fonts de ícones vinculadas ao layout

Arquivos de Imagem

Arquivos de Comportamentos

Pasta de Código fonte da Aplicação

Arquivos de configuração do banco de dados


Pasta de armazenamento de arquivos

Para controlar as nossas dependências da aplicação, utilizaremos o


aplicativo Composer.
1.3. Instalação do Composer

Composer é um gerenciador de pacotes de nível de aplicativo para a


linguagem de programação PHP que fornece um formato padrão para
gerenciar dependências de software PHP e bibliotecas necessárias.
(wikipedia). Site Oficial (getcomposer.org).

Para realizar a instalação em um ambiente Windows existe duas formas


que abordaremos.

1ª maneira é a realização do download do programa através do link:


https://getcomposer.org/Composer-Setup.exe

2ª maneira seria pelo prompt de comando:

Acesse o diretório de sua instalação do PHP ( que deve estar em


c:/xampp/php caso você esteja utilizando o Xampp) pelo prompt de
comando e digite o comando a seguir:

php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"

Esta linha de comando irá baixar o Composer.

Ainda no diretório da sua instalação do PHP digite:

echo @php "%~dp0composer.phar" %*>composer.bat

Caso o seu caminho do php não esteja dentro das variáveis de ambiente
do Windows.

Vá até: Sistema->Configurações Avançadas->Variavéis de ambientes e


procure por PATH e ao final adicione (no caso de você estar utilizando
Xampp)

c:/xampp/php

Feito isto acesse a pasta htdocs de seu servidor local a fim de verificar se
a instalação realmente funcionou.

Digite:
composer -V

Caso tudo tenha dado certo você verá algo como:

Composer version XXXXXXXXX….

1.4. Configurando o Autoload

Como foi dito anteriormente, o composer controlar os pacotes de


dependências do nosso sistema, mas para que isso funcione precisamos
criar um arquivo composer.json em nossa aplicação e instalar o autoload
que será o arquivo responsável por carregar nossas dependências.

Acesse a pasta raiz do sistema, neste caso SISTEMA_NOTICIAS, crie um


arquivo com o nome composer.json e digite a seguinte estrutura:

Na linha 2 e 3 descrevemos o nome da aplicação ou pacote e sua


descrição.

1.5. Instalação do Autoload

Após as configurações do arquivo composer.json, chegou a hora de


aplicar as configurações em nossa aplicação. Utilizando o terminal de
prompt de comando, acesse a pasta do projeto e digite o seguinte
comando:

Composer install

Depois deste comando o composer carregara uma pasta vendor em


nosso projeto, esta pasta será responsável por todas as dependências
que iremos instalar futuramente, ainda nesta pasta encontraremos o
arquivo autoload.php, este arquivo é o responsável por carregar as
dependências e nossas classes em nosso projeto.
Utilizaremos este arquivo no index.php, o arquivo principal do projeto.

Bom todas as pastas e configurações estando prontas.... Então é horas


de colocar a mão na massa....

Mas antes de começar a aplicação vamos estudar uma pouco...

Na pasta do material encontra-se uns arquivos que mostra algumas


funções principais de manipulação de string, array. Crie um arquivo php
e pratique estas funções. #ficaadica

Após os estudos de manipulação de string, array, vamos continuar o


desenvolvimento do nosso sistema.
2 Desenvolvimento do Sistema de Notícias

2.1 Criando o arquivo principal

Crie um arquivo index.php na pasta SISTEMA_NOTICIAS, neste arquivo


digite os seguintes comandos:

Este comando faz com que carregue as nossa dependências e classes


conforme as regras do arquivo composer.json. Após salvar o arquivo
realize o teste no seu navegador. http://dev.sistemanoticia.com
Se não retornar nenhum erro significa que tudo está ocorrendo como
planejado, agora caso tenha dado algum erro verifique se o arquivo
existe na pasta vendor, caso não exista realize os procedimentos da
configuração do Autoload(1.3) e a instalação do mesmo.

2.2 Sobre o arquivo .htaccess

Para que o nosso sistema esteja no padrão de URL amigáveis, facilitando


o acesso ao usuário aos nossos conteúdos e fazendo com que o google
de valor ao nosso projeto.
Vamos criar um arquivo .htaccess na pasta principal do projeto e
trabalhar o conceito mod_rewrite url amigáveis (Dica.: Para maior
conhecimento no assunto faça uma breve pesquisa neste tema)
2.2.1. Criando o arquivo .htaccess
Crie este arquivo e digite o seguinte comando:
Na linha 2 colocamos uma declaração onde o servidor ativa a reescrita
da URL.
Na linha 4 e 5, declaramos uma condição onde se chamarmos o arquivo
diretamente as condições abaixo é anulada, um exemplo é quando
chamamos um imagem em nosso projeto. O caminho da imagem não
pode ser reescrito por isso destas linhas.
Na linha 7 declaramos quem será o arquivo responsável pelo tratamento
das chamadas da URL que no nosso caso será o arquivo index.php que
criaremos a seguir.

2.2. Criando os arquivos do nosso Core do MVC


Criando o arquivo que irá controlar as nossas rotas do sistema. Rotas seria
as solicitações do usuário, isso significa que cada link teria que apontar
para um controller e executar uma função(action):
http://dev.sistemanoticia.com/usuario/visualizar/1
A informação (usuario/visualizar/1) da url será o nosso alias(apelido) que
apontará para o nome do Controller e a função/action do controller que
irá trabalhar com a lógica e solicitará o carregamento da view. Para que
este controle de rotas aconteça precisamos criar um arquivo dentro da
pasta core com o nome Routes.php crie este arquivo e digite os
comandos abaixo:

2.3. Criando o Arquivo de Routes.php

Na linha 2, declaramos o return, pois este arquivo só ira retornar os valores


de rotas do nosso sistema, e se olhar a declaração estamos vendo um
array onde a chave é o valor que o usuário digitará na URL, e o valor
desta chave representa qual é o Controller e a ação a ser executada.
Como mostra as URL abaixo:
http://dev.sistemanoticia.com/ => HomeController@index
http://dev.sistemanoticia.com/admin => AdminController@index
Com o arquivo de rotas criado, vamos agora criar o arquivo de
inicialização da nossa aplicação chamado Bootstrap.php na pasta core,
este arquivo será responsável por verificar se a rota solicitada pelo usuário
existe. Se existir ele carregara controller e executara a ação. Caso não
exista carregara o controller de erro.
Criando o Arquivo Bootstrap.php

Na Linha 2 declaramos o nome da função carregarRotas($routes), onde


passamos por parâmetro as rotas criadas anteriormente.
Na linha 4 criamos um foreach, onde vamos verificar os itens do array
$routes que foi passado como parâmetro na função.
Na Linha 5 estamos armazenando a url solicitada na variável $url.
Utilizamos a função do php strtok(), esta função captura a primeira parte
de uma string até a primeira ocorrência (?) for encontrada.
Exemplo se na nossa URL tiver assim:
http://dev.sistemanoticia.com/admin/usuario/editar?id=1
A função do php strtok() pegará a seguinte parte:
/admin/usuario/editar
Na linha 6 estamos realizando a função do php str_replace() que fara a
substituição, onde for (/) a função subtituira por (\/), isso será útil porque
utilizaremos o função do php preg_match() para a validação da rota.

Para que entenda melhor sobre validação de expressão regular,


recomendo que de uma olhada nos seguintes links e aprenda um pouco
sobre este assunto pois é muito útil para validação de informação entre
outras coisas que podemos fazer com a expressão regular.
http://www.phpliveregex.com/
http://intentor.com.br/pequeno-guia-regex/

Na Linha 7 como mencionada acima, estamos utilizando um condição


junto com a função preg_match() que validará se a rota existe. Se existir
entra no IF onde faremos o tratamento do conteúdo, carregando o
controller e a função/ação.

Na linha 8 foi utilizado a função unset(), para eliminar a chave 0 do


nosso array, neste item fica armazenado a URL completa. Veja o
resultado do var_dump($parametro)

O item 0 é apenas a informação contida na nossa URL e não vamos


utilizar, por isso eliminamos.
Na linha 9 utilizamos a função explode() para dividir uma string e retornar
as partes de uma string em um array. Nesta linha a variável $requisicao
armazenara a divisão do valor da rota encontrada:
Exemplo: ControllerController@editar
A variável $requisicao terá o seguinte array:
Na linha 10 e 11, apenas armazenamos os valores do array de forma
separada, o que seria o controller na variável $controller e função/ação
na variável $acao.
Na linha 12 carregamos o controller correspondente a rota que foi
solicitada, concatenando a variável constante CONTROLLER que foi
declarada no arquivo config.php, juntamente com o nome do controller
que está armazenado na variável $controller finalizando com a extensão.
php.
Este caminho está buscando o arquivo na pasta
“app/controllers/CategoriaController.php”
Na linha 13 utilizamos a função call_user_func_array(). que chamara a
função e passando parâmetros caso houver na nossa variável
$parametro
Na linha 14 apenas declaramos um return vazio para a função anulando
o foreach e a linha seguintes pois a rota já foi encontrada.
Na linha 17 e 18, declaramos o arquivo ErroController.php e chamamos a
função erro(), onde carregará uma mensagem de erro para o usuário,
quando uma rota não for encontrada.

2.6 Criando o Arquivo de Configuração


Crie este arquivo na pasta core com o nome Config.php, com a seguinte
sintaxe:

Este é apenas um arquivo com algumas informações padrões do sistema.


Onde criamos algumas variáveis Constante onde guardará o caminho
das pastas, facilitando as chamadas das dependências. Por exemplo:
Invés de chamar um arquivo assim:

require __DIR__.”/../../controller/HomeController.php”;

Chamaremos ele assim daqui para frente:

require CONTROLLERS.”/HomeController.php”;

Obs.: Todos o nome de constante deve ser escrita com letra MAIÚSCULA.

Carregando os Arquivo Bootstrap.php, Routes.php no arquivo index.php


Depois de ter criado os arquivos Routes.php e Bootstrap.php, chegou a
hora de utilizar a função. Abra o arquivo index.php e complemente o
arquivo com os seguintes comandos:

Na linha 2 estamos carregando a dependência autoload.php


Na linha 4 estamos carregando a dependência Config.php
Na linha 6 estamos carregando a dependência Bootstrap.php, veja que
nesta linha utilizamos o nome da constante que tem o caminho da
pasta do arquivo.
Na linha 8 estamos armazenando o array de rotas que criamos no
arquivo Routes.php

Na linha 10 chamamos a função carregarRota() que foi desenvolvida no


arquivo Bootstrap.php, passando as rotas do nosso sistema que está
armazenado na variável $routes
Se realizar o teste acessando o link: http://dev.sistemanoticia.com

O sistema gerara um erro pois não temos nenhum controller. Então vamos
criar nossos controller padrão citado no arquivo Routes.php na linha 3 e
4.

2.4 Criando o arquivo HomeController.php

Crie um arquivo HomeController.php na pasta app/controllers com


seguintes códigos:

Salve o arquivo e teste no navegador, se o seu arquivo de Routes.php e


o arquivo index.php estiver com a sintaxe correta, acessando o
endereço:
http://dev.sistemanoticia.com
Retornará a mensagem:

Agora faça a mesma coisa para a rota /admin, citada no arquivo


Routes.php. Devemos criar um arquivo AdminController.php e neste
arquivo uma função index(), após esta criação execute um teste
acessando: http://dev.sistemanoticia.com/admin
Criando o core dos Controllers
Para facilitar os o desenvolvimento dos controles, iremos crias uma
função comum para todos os outros controladores. E nesta função
criaremos um método para carregar nossos layouts e nossas view.
2.7.1 Criando o arquivo Controller.php
Crie um arquivo Controller.php dentro da pasta core com os seguintes
comados:

Neste arquivo criamos três funções onde o nosso sistema terá 3 tipos de
layout:

 Layout do Site
 Layout do Login
 Layout da área administrativa

Para facilitar a chamada neste arquivo em todos os nossos controller que


criaremos. Vamos criar uma variável constante no nosso arquivo
Config.php que armazenara o caminho deste arquivo. Abra o arquivo
Config.php e adicione a seguinte linha:
define('BASE_CONTROLLER', __DIR__."/Controller.php");

Abra o arquivo HomeController.php e faça as seguintes inclusões:

Na linha 3 declaramos a dependência do arquivo Controller.php, através


da constante criada no arquivo Config.php que acabamos de criar e
chamamos ele BASE_CONTROLLER.

Saiba mais: http://php.net/manual/pt_BR/language.constants.php

Agora com as funções criadas e as dependências declaradas podemos


chamar o nosso layout e nossas views.

2.7.2 Criando os arquivos das Views

Antes de iniciar crie uma pasta dentro da pasta views com o nome
layouts. E dentro da pasta crie um arquivo site.php com os seguintes
comandos:
Um arquivo php com tags de HMTL5 básicas, onde neste arquivo estou
incluindo o conteúdo da view solicitada que está na variável
$conteudoView.

Esta variável foi criada no arquivo Controller.php na linha 4. É nesta


variável que está o caminho do arquivo da view, pois isso estamos
utilizando o include();

2.7.3 Criando as Views do HomeController.php

Nosso sistema segue um padrão, sendo que todas as vezes que criar um
controller você deverá criar uma pasta dentro da view com o mesmo
nome. Exemplo: Criamos um controller HomeController.php então
devemos criar uma pasta home dentro da pasta views com letras
minúsculas.

Com a pasta home criada vamos criar um arquivo dentro desta pasta
com o nome index.php com os seguintes comandos:
Os textos da tag <p> pode ser retirado da internet é apenas um texto de
preenchimento.

Na linha 13 foi declara uma variável, onde a mesma imprimira o valor


declarado em nosso controller.

Agora que nosso layout e view estão prontas podemos chamar dentro
dos nossos controllers.

Abra o arquivo HomeController.php e na função index(), digite os


seguintes comandos:

Na linha 8 chamamos a função viewSite() criado lá no arquivo


Controller.php, já que declaramos a dependência do Controller.php em
nosso arquivo HomeController.php, podemos utilizar suas funções.

Veja que também estamos passando uma variável com o nome


meunome que está recebendo um valor da variável criada $meunome.
Salvamos este arquivo e testamos. Caso esteja tudo certo terá o seguinte
resultado:

Veja que o valor da variável foi passado para o arquivo index.php que
está dentro da pasta views/home, e este arquivo foi incluído dentro do
layout.

Pronto nosso MVC está concluído

Faltando apenas o nosso model que fara a ligação direta com o banco
de dados.

Na próximos aula abordaremos o CRUD de nosso sistema. E a aplicação


de um template na nossa área admin.

Então não percam este episódio!!!!

Potrebbero piacerti anche