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:
- <?php
- function onEdit($param)
- {
- TApplication::registerPage('customer-edit-'.$param['key']);
- //...
- }
- ?>
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.
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!
Boa tarde a todos, Problema resolvido (limpeza do cache)! Grato!