Construindo um framework PHP - Controlador
Olá! Nesse post o nosso objetivo principal vai ser: conseguir chamar um controlador e sua ação.
A primeira coisa que vamos fazer é definir a estrutura de diretório da nossa apliação. Vamos construir uma estrutura que seja compatível com o padrão MVC. Ela ficará assim:
Aplicacao: arquivos da nossa aplicação. O que de fato vamos desenvolver.
Biblioteca: arquivos auxiliares externos. Desenvolvidos por outras pessoas/empresas e que vamos utilizar na construção da nossa aplicação. Ex: Frameworks, classes de geração de PDF, geração de imagens, envio de e-mail etc.
Público: arquivos que vão estar na pasta pública do nosso servidor(www, public_html). É importante que nossos arquivos PHP fiquem em uma pasta que não seja pública, assim, podemos definir uma única porta de entrada para nossa aplicação, o index.php, e deixar os outros arquivos protegidos.
Agora vamos criar o conteúdo do arquivo index.php. Como ele vai ser a porta de entrada da aplicação, ele terá de ser capaz de, por meio de parâmetros, conseguir chamar os controladores. Então ficará assim:
//define a função mágica de carregamento automático de classes.
//Essa função é chamada sempre que criamos um objeto, assim, não precisamos dar o require manualmente.
function __autoload($nomeClasse) {
$dir = '../aplicacao/controlador';
$localClasse = realpath($dir) . '/' . $nomeClasse . '.php';
if (file_exists($localClasse)) {
require($localClasse);
return true;
}
return false;
}
//define o nome padrão para o controlador e a acao
$nomeControlador = "inicial";
$nomeAcao = "inicial";
//verifica se existe parametro "controlador" e se ele tem valor
if (isset($_GET['controlador']) && $_GET['controlador']) {
$nomeControlador = $_GET['controlador'];
}
//verifica se existe parametro "acao" e se ele tem valor
if (isset($_GET['acao']) && $_GET['acao']) {
$nomeAcao = $_GET['acao'];
}
//padronizacao de nome
$nomeControlador = 'Controlador' . ucfirst(strtolower($nomeControlador));
$nomeAcao = 'acao' . ucfirst(strtolower($nomeAcao));
//chamada da classe(controlador) e metodo(acao)
if (class_exists($nomeControlador)) {
$controlador = new $nomeControlador;
if (method_exists($controlador, $nomeAcao)) {
$controlador->$nomeAcao();
} else {
echo "Acao nao encontrada.";
}
} else {
echo "Controlador nao encontrado.";
}
Só falta construir o nosso controlador. Ele será bem simples e ficará dentro da pasta aplicacao/controlador. Segue o código:
class ControladorInicial
{
public function acaoInicial()
{
echo "Sou a acao inicial";
}
}
Agora é chamar no browser para ver se está tudo funcionando. Acesse: http://localhost/planeta/primeiro/publico/index.php.
No meu repositório https://github.com/abdala/Planeta-Framework coloquei mais um controlador de exemplo.
Espero que te ajude. Abraço!