Frameworks são criados com o intuito de acelerar o desenvolvimento de softwares, evitando que se perca tempo na hora da codificação.
Antes de iniciarmos o nosso framework, vamos pensar como vai ser a estrutura de diretórios e como vão ser feitas as requisições.
framework
| application
| | controllers
| | models
| | views
| public
| | .htaccess
| | index.php
| .htaccess
Nesse modelo de diretório, seguindo o padrão de arquitetura MVC (Modelos, Visões e Controladores), nos temos uma página index.php dentro da pasta public, que vai ser nossa pasta de acesso pública, todas as outras pastas serão de acesso restrito, então todas as requisições vão ser feitas por essa index.
Para que isso aconteça, criamos os arquivos .htaccess com os seguintes códigos:
.htaccess da pasta do framework
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
Nesse .htaccess agente redireciona qualquer acesso a pasta framework, para a pasta public.
Agora o .htaccess da pasta public
RewriteEngine on
RewriteRule !\.(js|ico|txt|gif|jpg|png|css|doc|log|pdf|rtf|odt|xls)$ index.php
Nesse outro .htaccess agente fala que só os arquivos de imagens, css, javascript e a página index.php podem ser acessados.
Bem, agora já temos a metade do nosso framework feito. Precisamos configurar a nossa página index.php da pasta public para receber as requisições e chamar o controlador correspondente.
Os controladores e seus métodos vão ser chamados via parâmetro na URL.
index.php
$url = $_SERVER["REQUEST_URI"];
$url = str_replace("/sergio/exemplos/mvc/", "", $url);
$op = explode("/", $url);
if ( $op[0] )
{
include ("../application/controllers/" . $op[0] . ".php");
$obj = new $op[0] ();
}
else
{
include ("../application/controllers/hello.php");
$obj = new Hello();
}
if ( $op[1] == "" )
{
$obj->index();
}
else
{
$obj-> $op[1] ( $op[2] );
}
Passo a passo:
Na linha 1 eu pego todo o caminho da nossa aplicação apartir do servidor. Exemplo: se eu tenho um endereço http://localhost/aqui/eonosso/caminho , com o REQUEST_URI eu vou pegar /aqui/eonosso/caminho.
Na linha 3 eu retiro a parte que não é interessante pra mim, no caso aqui/eonosso/caminho, que eu tenho que acessar antes, até chegar na minha aplicação.
Na linha 5 eu tiro todas as / (barras) encontradas no endereço e monto um array a partir de cada barra tirada, e armazeno na variável $op.
Nas outras linhas eu monto uma estrutura de condição para verificar se foi passado algum nome de controle por parâmetro, se não for passado eu chamo o controle hello, que no nosso caso vai ser o nosso controle padrão. Também verifico se foi passado algum método por parâmetro, se não foi passado chamo o index.
Agora precisamos criar o controlador hello e o método index para que possamos ver o nosso framework funcionando.
hello.php
class Hello
{
public function index ()
{
echo "alooooooooo class hello metodo index!";
}
}
Lembrando que esse arquivo hello.php é a nossa classe controladora hello e tem que ser salva no diretório de controllers.
Agora se tentamos acessar, http://localhost/aqui/eonosso/caminho ele vai chamar o controlador padrão, no nosso caso o hello, e o método index. Se tentarmos acessar http://localhost/aqui/eonosso/caminho/hello ele também vai acessar e se tentamos http://localhost/aqui/eonosso/caminho/hello/index também irá funcionar.
Bem, com essas explicações já temos o nosso framework php rodando! Agora é só codificar suas classes e métodos e construir o seu framework.
No próximo post eu vou trazer um exemplo de uso desse nosso framework utilizando as 3 camadas aqui criadas, a camada controladora, a camada de modelos e a camada de visões.
Até a próxima…