Múltiplos Uploads com PHP, Mysql e Ajax - #5 Despachante
28/10/2019Hoje faremos a criação base do nosso sistema, o arquivo despachante (ClassDispatch). Esse arquivo será a base de inclusão das nossas urls.
Criando o arquivo despachante no PHP
Dentro da pasta classes vamos criar o arquivo ClassDispatch com o seguinte código:
<?php
namespace Classes;
use Traits\TraitParseUrl;
class ClassDispatch{
private $init;
private $url;
private $dir=null;
private $cont;
private $file;
private $page;
use TraitParseUrl;
public function __construct()
{
$this->url=TraitParseUrl::parseUrl();
$this->cont=count($this->url);
$this->verificaParametros();
}
#Verificar se existem parâmetros digitados pelo usuário
private function verificaParametros()
{
if($this->cont == 1 && empty($this->url[0])){
$this->page=DIRREQ.'views/index.php';
}else{
$this->verificaDir();
}
}
#Verificar se o Ãndice digitado pelo usuário é um diretório
private function verificaDir()
{
$this->init=$this->url[0].'/';
for($i=0; $i<$this->cont; $i++){
if(is_dir($this->init)){
if($i==0){
$this->dir.=$this->init;
}elseif(is_dir($this->dir.$this->url[$i])){
$this->dir.=$this->url[$i].'/';
}else{
$this->file=$this->url[$i];
break;
}
}else{
if($i==0){
$this->dir.='views/';
}
if(is_dir($this->dir.$this->url[$i])){
$this->dir.=$this->url[$i].'/';
}else{
$this->file=$this->url[$i];
break;
}
}
}
$this->dir=str_replace("//","/",$this->dir);
$this->verificaFile();
}
#Verificar se existe o arquivo requisitado, se não existir ele chama o index.php, senão chama a pagina 404.
private function verificaFile()
{
$dirAbs=DIRREQ.$this->dir;
if(file_exists($dirAbs.$this->file.'.php')){
$this->page=$dirAbs.$this->file.'.php';
}elseif(file_exists($dirAbs.'index.php')){
$this->page=$dirAbs.'index.php';
}else{
$this->page=DIRREQ.'views/404.php';
}
}
#Retornar a página final para o sistema
public function getInclusao()
{
return $this->page;
}
}
Vamos as explicações dos métodos:
verificaParametros(): esse método vai verificar se foi requisitado algum parâmetro na url, então se for apenas o "localhost" ou "seusite.com" ele já vai definir o atributo page como views/index.php senão ele vai chamar o método verificaDir().
verificaDir(): possui a função de verificar se o parâmetro passado na url é um diretório e caso for ele vai concatenando até gerar uma árvore de diretórios. Quando não for mais um diretório requisitado ele vai setar o atributo file.
verificaFile(): esse método verifica se existe o arquivo .php solicitado pelo atributo $this->file, se existir ele já atribui ao atributo page aquele caminho, senão ele verifica se existe dentro do diretório o arquivo index.php e atribui o $this->page. Se de tudo não existir, ele chama a página de erro 404.php.
getInclusao(): retorna para o sistema o atributo page. Esse atributo já vem com todos os diretórios concatenados e com o arquivo.php, pronto para ser incluÃdo no sistema.
Incluindo a página no index.php
Na index.php (essa index na raiz geral do projeto) vamos instanciar a ClassDispatch e incluir dinâmicamente o arquivo solicitado:
$dispatch=new Classes\ClassDispatch();
include($dispatch->getInclusao());
Crie um arquivo simples dentro da pasta views com o nome index.php:
<?php
echo "Hello World";
Acesse no firefox o http://localhost . Se aparecer a mensagem Hello World quer dizer que seu arquivo despachante já está incluindo corretamente os arquivos.
Página 404
Dentro de views também, crie uma página 404.php para receber um valor quando a url digitada não existir:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>Página não encontrada!</h1>
</body>
</html>
A ClassDispatch é um pouco complexa, mas ela é a base do nosso sistema. � muito interessante que você a entenda para dar prosseguimento ao curso.
Sucesso nos códigos e na vida!