menu
Adianti Framework
menu Menu
Rotas amigáveis no Adianti Framework 5.5 Pablo Dall'Oglio ( 2018-11-08)
Ao criarmos uma aplicação com o Framework, percebemos que a URL nativa contém a informação da classe e do método que será executado, no seguinte formato:
http://www.aplicacao.local/index.php?class=ContactForm&method=onEdit&key=1


Como o Framework é utilizado na grande maioria das vezes para criar sistemas corporativos internos, a URL não é tão relevante quanto seria em um web site público ou e-commerce. Mas mesmo em contextos privados e corporativos, é interessante usarmos URL’s em um formato amigável para facilitar o compartilhamento de links entre colaboradores. Além disso, o Framework é cada vez mais usado para produzir diferentes tipos de aplicações, como e-commerce, portais corporativos, etc. Dessa forma, vamos verificar como transformar uma URL completa em uma URL resumida:
http://www.aplicacao.local/contact-edit?key=1


Aplicação de exemplo


Uma aplicação com rotas pré-configuradas é disponibilizada para download junto aos arquivos do Framework. Ela se chama Contacts API (www.adianti.com.br/framework-contacts), e além de rotas amigáveis possui outros recursos como serviços REST e RESTFul. A aplicação Contacts API já possui rotas pré-definidas para todas as ações previstas no Template, tais como: gerenciamento de programas, grupos de usuários, unidades, preferências, documentos, dentre outros. Caso tenha dúvidas, faça download da Contacts API para verificar uma aplicação já em funcionamento com o recurso de rotas amigáveis.

Pré requisitos


Para a abordagem a seguir funcionar, utilizaremos o servidor de páginas Apache. Antes, é preciso configurar o apache para habilitar a sobrescrita de configuração (AllowOverride), o que geralmente é feito no apache2.conf.

apache2.conf
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All </Directory>


Configurando as rotas de entrada



O primeiro passo é configurar as rotas no servidor de páginas (Apache, Nginx). Neste exemplo, vamos utilizar o Apache. O primeiro passo é criar um arquivo no diretório raiz da aplicação (.htaccess) com as rotas e os seus respectivos direcionamentos. Neste exemplo, estamos criando rotas para o formulário de edição (contact-edit), para listagem (contact-list), e exclusão de registros (contact-ondelete, contact-delete), todas apontando para o index.php. Caso o usuário digite na URL estes caminhos, o servidor de páginas redirecionará para o index.php com os respectivos parâmetros. Além das rotas para o index.php, o Framework precisa das rotas para o engine.php. Estas rotas iniciam com xhr- e são usadas internamente para a navegação no sistema, sem necessidade de recarregamento de toda a página. A navegação interna (post, edição, paginação, ordenação) utiliza as rotas xhr- para maior performance.

.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #Application specific routes RewriteRule ^contact-edit$ index.php?class=ContactForm&method=onEdit&%{QUERY_STRING} [NC] RewriteRule ^contact-list$ index.php?class=ContactList&method=onReload&%{QUERY_STRING} [NC] RewriteRule ^contact-ondelete$ index.php?class=ContactList&method=onDelete&%{QUERY_STRING} [NC] RewriteRule ^contact-delete$ index.php?class=ContactList&method=Delete&%{QUERY_STRING} [NC] RewriteRule ^xhr-contact-edit$ engine.php?class=ContactForm&method=onEdit&%{QUERY_STRING} [NC] RewriteRule ^xhr-contact-list$ engine.php?class=ContactList&method=onReload&%{QUERY_STRING} [NC] RewriteRule ^xhr-contact-ondelete$ engine.php?class=ContactList&method=onDelete&%{QUERY_STRING} [NC] RewriteRule ^xhr-contact-delete$ engine.php?class=ContactList&method=Delete&%{QUERY_STRING} [NC]


Obs: O Template já acompanha um arquivo htaccess-dist, com rotas padrão. Renomeie-o para .htaccess e adicione as suas rotas, conforme sugerido.

Traduzindo as rotas geradas pelo Framework


Até este ponto, configuramos as rotas de entrada na aplicação, o que significa que se o usuário entrar na URL com a rota curta, o sistema já direcionará para o caminho correto. Entretanto, os links gerados internamente pelo Framework devem ser traduzidos para o formato curto também. Links são gerados em diversas situações como em postagens de formulários, ordenação, paginação de datagrids, edição de datagrids, dentre outros. Nestes casos, o Framework precisa entender que é necessário gerar a rota encurtada no lugar da rota nativa. Para que isso seja possível, é necessário alterar os arquivos index.php e engine.php para habilitar um tradutor de rotas. O tradutor indicará ao Framework traduzir as rotas extensas em rotas curtas.

index.php
  1. <?php
  2. AdiantiCoreApplication::setRouter(array('AdiantiRouteTranslator''translate'));
  3. ?>


engine.php
  1. <?php
  2. AdiantiCoreApplication::setRouter(array('AdiantiRouteTranslator''translate'));
  3. ?>


A classe AdiantiRouteTranslator é responsável por traduzir as rotas geradas pelo Framework para o formato curto. Ela pode funcionar no modo manual ou automático. No modo manual (procure por “manual entries” no arquivo a seguir), você deve criar um vetor com o mapeamento da URL a ser traduzida e sua versão amigável. Já no modo automático, basta executar o método parseHtAccess() para realizar a leitura do arquivo .htaccess e gerar o mapeamento automaticamente. Assim, se você seguir as instruções e usar Apache com .htaccess, não será necessário alterar este arquivo.

app/lib/util/AdiantiRouteTranslator.php
  1. <?php
  2. class AdiantiRouteTranslator
  3. {
  4.     public static function translate($url$format TRUE)
  5.     {
  6.         /** manual entries
  7.          $routes = array();
  8.          $routes['class=TipoProdutoList'] = 'tipo-produto-list';
  9.          $routes['class=TipoProdutoList&method=onReload'] = 'tipo-produto-list';
  10.          $routes['class=TipoProdutoForm&method=onEdit']   = 'tipo-produto-edit';
  11.          $routes['class=TipoProdutoForm&method=onDelete'] = 'tipo-produto-ondelete';
  12.          $routes['class=TipoProdutoForm&method=delete']   = 'tipo-produto-delete';
  13.          */
  14.         
  15.         // automatic parse .htaccess
  16.         $routes self::parseHtAccess();
  17.         // ...
  18.     }
  19. }
  20. ?>


Testando


Agora, você já pode navegar na aplicação pelas rotas cadastradas e verá o funcionamento, como no caso a seguir:
http://www.aplicacao.local/contact-edit?key=1


Possíveis erros


Caso durante a navegação ocorram erros como “Connection Failed”, é provável que a rota está cadastrada da maneira errada no .htaccess, ou o Apache não está com o AllowOverride habilitado corretamente.



Comentários

Ico Menezes: ( 2019-03-15)
  1. <?php
  2. Show demais este artigoPablo
  3. ?>
Paul Anderson: ( 2020-06-04)
Let us revive your business with our custom mobile app development services! https://itsolution24x7.com/mobile-apps-development
 


Você precisa realizar login para enviar posts, comentários, dentre outros. Para isso, clique em um dos botões a seguir para logar utilizando a API de um dos serviços.