Маршрутизация Zend Framework:расширение .html
-
19-08-2019 - |
Вопрос
Я знаю, что видел, как это делалось раньше, но я нигде не могу найти эту информацию.Мне нужно иметь возможность маршрутизировать с расширениями .html в Zend Framework.
Т.Е./controller/action.html должен перенаправляться к соответствующему контроллеру / действию.
У нас есть идея удалить расширение .html с нашим файлом .htaccess, но я думаю, что изменение конфигурации маршрута было бы лучшим решением.
Любой совет приветствуется.
Решение
Быстрый поиск в Google выдал следующие учебные пособия:
Расширение маршрута и маршрутизатора Zend Framework для пользовательской маршрутизации
Маршрутизация и сложные URL-адреса в Zend Framework
Другие советы
Это плагин, который я использовал в нескольких приложениях:
/**
* 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);
}
}
Я пытался сделать то же самое для старого приложения.Вот что сработало у меня.
$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')
);
Маршрут по умолчанию (без модулей) является:
:controller/:action
Который вы можете удалить с помощью:
$router->removeDefaultRoutes();
Затем добавьте свою версию:
:controller/:action.html