Nesse artigo pretendo ensinar uma forma fácil de construir uma função que fique responsável por formatar a URL, tornando-a dinâmica e amigável.
Diferente das demais formas de construção de URL´s Amigáveis, essa forma trabalha com um método de "Alias" (apelidos) para determinado arquivo ou pasta e possibilita a o envio de variáveis via GET.
Obs.: Esse método está sendo aplicado da forma mais simples possível, justamente para melhor entendimento do processo.
Requerimento:
- Conhecimentos intermediários nas diretivas do Apache;
- Conhecimentos Intermediários em expressão Regular;
- Conhecimentos Intermediários em PHP;
- Apache com o mod_rewrite habilitado.
Primeiramente, criaremos um diretório onde ficará o projeto, vamos chamá-lo de projeto_1.
Dentro desse diretório criaremos três arquivos e um diretório:
- O arquivo .htaccess, onde criaremos a regra de reescrita da url;
- O arquivo main.php, que será responsável dela indexação do site;
- O arquivo url_response.php, onde será codificada a função para o tratamento da url;
- O diretório applications, onde serão guardados nossos aplicativos ex.: noticias.php, índex.php etc
No arquivo .htaccess vamos criar regras de url usando o mod_rewrite(módulo responsável por reescritas de url) do apache.
# Habilitamos o modo Rewrite
RewriteEngine on
#Aqui, criamos as regras de redirecionamento.
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ main.php
Detalhando o arquivo .htaccess
Na diretriz RewriteEngine é possível habilitar(On) ou desabilitar(off) o modo de reescrita do apache. Em RewriteRule configuramos a regra de reescrita das urls, neste caso redirecionamos para main.php.
Feito isso vamos criar e codificar a função responsável por tratar a URL, abra o arquivo url_response.php:
Neste trecho:
//diretório do projeto
if(!defined(´PROJECT_DIR´))
define(´PROJECT_DIR´, ´projeto_1´);
Definimos a constante PROJECT_DIR onde conterá o diretório do projeto. No trecho a seguir definimos o diretório da aplicação e a url enviada pelo browser.
// diretório da aplicacao
if(!defined(´APPLICATION_DIR´))
define(´APPLICATION_DIR´, ´applications´);
// URL enviado
if(!defined(´REQUEST_URI´))
define(´REQUEST_URI´ ,str_replace(´/´.PROJECT_DIR,´´,$_SERVER[´REQUEST_URI´]));
Por último a constituição da função url_response responsável pelo tratamento da url.
foreach($urlpatterns as $pcre=>$app){
if(preg_match("@^{$pcre}$@",REQUEST_URI,$_GET)){
include(APPLICATION_DIR.´/´.$app);
exit();
}else{
$msg = ´<h1>404 Página não existe</h1>´;
}
}
Aqui é criado um laço responsável por percorrer o array com as URLs padrões e procurar o arquivo na pasta de aplicações, caso exista é feito sua inclusão. Caso não exista o arquivo apresento uma mensagem de página inexistente, ou 404.
Usando a função no arquivo main.php:
O include não tem segredo. Na array $urlpatterns como o próprio nome diz refere-se aos padrões de url. O índice do array é a url e o valor é o arquivo que deve ser executado.
Exemplo:
´/´=>´index.php´
´/´ refere-se a raiz por exemplo www.dominio.com.br/ que será redirecionado ao índex.php
´/noticias´=>´noticias.php´
´/noticias´ refere-se a www.dominio.com.br/noticias onde executa o arquivo noticias.php
´/noticia/(?P<id_noticia>\d+)´=>´noticias.php´
Aqui eu usufruo da expressão regular para enviar um parâmetro com valor decimal
Via GET. A url ´/noticias/(?P<id_noticia>\d+)´ refere-se a www.dominio.com.br/noticias/12. O valor é acessado via GET para o arquivo notícias.php
Por último criamos os arquivos índex.php e noticias.php na pasta applications.
Abaixo deixo um exemplo simples dos arquivos para melhor entendimento do processo de cada arquivo.
index.php
noticias.php
Nenhum comentário:
Postar um comentário