Zend Framework Routing: extensão .html
-
19-08-2019 - |
Pergunta
Eu sei que eu vi este feito antes, mas não consigo encontrar a qualquer lugar da informação. Eu preciso ser capaz de rota com extensões .html no Zend Framework.
I.E. /controller/action.html deve ser encaminhado para o controlador / ação apropriada.
Nós temos uma idéia de jogar fora a extensão .html com nosso arquivo .htaccess mas acho que mudar a configuração de rota seria a melhor solução.
Qualquer conselho é bem-vindo.
Solução
Uma busca rápida no google produziu os seguintes tutoriais:
Estendendo Zend Framework Route e Router para o costume de roteamento
URLs de roteamento e complexos em Zend Framework
Outras dicas
Este é o plugin que eu usei em várias aplicações:
/**
* Removes .html extension from URI, if present.
*/
class Application_Plugin_RemoveHtmlExtension extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
// remove ".html" from the end of the URI
$url = preg_replace('#\.html$#i', '', $request->getRequestUri());
$request->setRequestUri($url);
}
}
Eu estava tentando fazer o mesmo para um aplicativo antigo. Aqui está o que funcionou para mim.
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute('routeHTML', new Zend_Controller_Router_Route_Regex( '([a-z-]+)/([a-z-]+)/([a-z-]+)\.html', array(),
array(1 => 'module', 2 => 'controller', '3' => 'action') ,
'%s/%s/%s.html')
);
A rota padrão (sem módulos) é:
:controller/:action
O que você pode remover por:
$router->removeDefaultRoutes();
Em seguida, adicione a sua versão:
:controller/:action.html