URLs amigáveis no Adianti Framework ESTE ARTIGO ESTÁ DESATUALIZADO, ACESSAR O NOVO EM: https://www.adianti.com.br/forum/pt/view_4678?rotas-amigaveis-no-adianti-framework-55 Como vocês desenvolvedores no framework já devem ter percebido há bastante tempo, o padrão de registro de URLs em aplicações é bastante simples seguindo o seguinte formato, composto da classe de controle e do método acionado: apli...
PD
URLs amigáveis no Adianti Framework  
Fechado


ESTE ARTIGO ESTÁ DESATUALIZADO, ACESSAR O NOVO EM:
https://www.adianti.com.br/forum/pt/view_4678?rotas-amigaveis-no-adianti-framewo

Como vocês desenvolvedores no framework já devem ter percebido há bastante tempo, o padrão de registro de URLs em aplicações é bastante simples seguindo o seguinte formato, composto da classe de controle e do método acionado:

aplicacao/index.php?class=CustomerFormView&method=onEdit&key=1


Entretanto em diversas situações, você desejaria que sua URL estivesse em um formato amigável, como esse:

aplicacao/customer-edit-1


Em aplicações de negócio (que é o foco do framework), essa não é uma questão tão relevante, pois o sistema normalmente é utilizado em setores administrativos internos às organizações, seguindo um rígido controle de permissões de acesso, fornecido pelos templates (www.adianti.com.br/framework-template2). Mas mesmo assim, é fácil alterar o comportamento das URL's no framework.

O primeiro passo a se fazer é desligar o registro de URL default do framework, o que é feito ao definir o atributo registerState no application.js, que é o arquivo em que customizamos o comportamento JavaScript da aplicação.

app/lib/include/application.js
Adianti.registerState = false;


O framework possui um CORE de funções JavaScript, que é o adianti.js. Nele existem funções como a __adianti_register_state(). Esta função verifica se o Adianti.registerState está ligado ou não. Neste caso, ela irá parar de registrar o estado das URLs. A partir deste momento, você não verá mais o registro das URLs.

lib/adianti/include/adianti.js
__adianti_register_state(url, origin)


Agora você precisará registrar as URLs manualmente, o que é feito em duas etapas. A primeira é registrar uma nova URL de dentro da aplicação. O que é facilmente obtido pelo método TApplication::registerPage(). Este método recebe um novo conteúdo para a URL. Então vamos supor que você tem um método onEdit() que gostaria de registrar algo na URL. Neste caso, basta chamar o método da seguinte forma:
  1. <?php
  2.     function onEdit($param)
  3.     {
  4.         TApplication::registerPage('customer-edit-'.$param['key']);
  5.         //...
  6.     }
  7. ?>


Você já visualizará na URL algo no formato "aplicacao/customer-edit-6". Mas agora temos outro problema. Caso o usuário digite este conteúdo na URL e dê um ENTER, teremos um erro de "Not Found", pois este conteúdo não será localizado. Aí entram as reescritas de rotas. O apache permite isso por meio da definição do .htaccess no diretório principal da aplicação. Então basta criarmos um .htaccess com o seguinte conteúdo:

.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule customer-edit-([0-z]+)$ index.php?class=CustomerFormView&method=onEdit&key=$1


Pronto, agora você tem URLs amigáveis no Adianti Framework. Para implementar para os próximos métodos basta lembrar de adicionar a chamada ao TApplication::registerPage() dentro do método e registrar uma linha nova no .htaccess. E se não funcionar pode ser que o seu Apache não esteja configurado para ler o conteúdo do .htaccess. Neste caso, lembre de habilitar o mod_rewrite do apache, e de ligar a cláusula "AllowOverride All" na configuração do host.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (3)


JR

JR

Boa tarde a todos!

Muito Profissional Pablo, Adianti, Comunidade, enfim, parabéns e obrigado pelo compartilhamento de tanto conhecimento!

Por favor, no registro de URLs manualmente, utilizando o código:
<? TApplication::registerPage('customer-edit-'.$param['key']); ?>
, nos métodos os quais foram chamados por um action de um form:
<? $this->form->addAction('Listar', new TAction(['MembroList', 'onShow']), 'fa:pencil-square-o blue'); ?>
ocorre tudo em perfeita harmonia, mas se a invocação estiver no:
<? $action_edit = new TDataGridAction(array('MembroFormView', 'onShow'));?>
, ou seja, num action da um TDataGrid, não acontece nada. Gostaria de saber o porquê?

Agradeço e conto com vossas orientações!
JR

Boa tarde a todos, Problema resolvido (limpeza do cache)! Grato!