Комментарии 42
Хочу добавить что очень удобно роутинг хранить в отдельном ini файле. К примеру:
И сетить:
routes.admin-login.route = "/admin/login"
routes.admin-login.defaults.controller = "index"
routes.admin-login.defaults.action = "login"
И сетить:
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'production');
$router->addConfig($config,'routes');
+5
Спс, полезное добавление
0
А еще полезнее хранить в несокльких файлах, у меня в application/configs есть папка routes и в ней по-модульно хранятся ini-файлы роутов (routes/%modulename%.ini), спасает от большого кол-ва роутов.
0
Использовать много файлов конфигов надо тогда как минимум с кэшированием в памяти, иначе потеря в производительности обеспечена.
Лучше тогда хранить в одном всё application.ini файле или module.ini в зависимости от структуры приложения, там всё довольно таки структурировано. Добавляем комментарии через; и можно потом быстро разобраться что к чему.
Лучше тогда хранить в одном всё application.ini файле или module.ini в зависимости от структуры приложения, там всё довольно таки структурировано. Добавляем комментарии через; и можно потом быстро разобраться что к чему.
0
А почему нельзя в основном это хранить и больше никакого php кода не писать для подключения других конфигов?
0
А я никогда не понимал зачем использовать ini-файл для роутинга. В routes.php И синтаксис привычнее, да и вообще объём меньше получается. И более понятны пути, имхо.
+1
А еще удобней хранить роуты в yaml/xml файлах.
Написать свой ресурс, кот парсит yaml/xml файлы и добавляет роуты в Zend_Controller_Router_Rewrite (лучше всего проюзать Zend_Application_Resource_Router, например унаследовавшись от него).
Не забудем, что этот объект можно хранить в кэше и сбрасывать кэш по требованию из консоли.
И, да, в application.ini останется дописать лишь вызов нашего ресурса, например так:
config_dir — директория, где лежать yaml/xml файлы с нашими роутами.
Пример xml файла:
Написать свой ресурс, кот парсит yaml/xml файлы и добавляет роуты в Zend_Controller_Router_Rewrite (лучше всего проюзать Zend_Application_Resource_Router, например унаследовавшись от него).
Не забудем, что этот объект можно хранить в кэше и сбрасывать кэш по требованию из консоли.
И, да, в application.ini останется дописать лишь вызов нашего ресурса, например так:
resources.Router.config_dir = APPLICATION_PATH "/routes"
config_dir — директория, где лежать yaml/xml файлы с нашими роутами.
Пример xml файла:
<?xml version="1.0" encoding="utf-8"?>
<configdata>
<routes>
<AdminHelpIndex>
<type>Zend_Controller_Router_Route</type>
<route>admin/help.html</route>
<defaults>
<module>admin</module>
<controller>help</controller>
<action>index</action>
</defaults>
</AdminHelpIndex>
</routes>
</configdata>
+1
Смотрится еще страшнее чем ini-файл. Зачем всё усложнять, а?
+1
Это не может смотреться страшнее, т.к. xml поддерживает вложенность напрямую.
Еще меньше кода — yaml
Строго говоря, можно и php кодом в виде вложенных массивов оформить — главное разделить данные и код.
Еще меньше кода — yaml
Строго говоря, можно и php кодом в виде вложенных массивов оформить — главное разделить данные и код.
+1
На хабре была хорошая статья по производительности конфигов. ini-файлы парсятся быстрее всех.
0
Там было без учета кеша, с кешированием разницы, можно считать, нет.
0
Не столь важно как быстро парсится тот или иной конфиг, кэширование все решает.
+1
Еще удобнее хранить описание маршрутов в базе данных
0
Если второй пример — просто демонстрация использования Zend_Registry, то еще ладно. А вообще есть $this->getInvokeArg('bootstrap')->getOption('constants') для этого, зачем для этого два раза открывать конфиг
+1
$page = $this->getRequest()->getParam('page');
Можно ещё через хелпер, так:
$page = $this->_getParam('page', 'default');
второй параметр устанавливает значение по умолчанию, если оно не задано.
+1
По поводу роутинга — ничего нового, всё это уже есть в мануале.
По поводу констант — не смотрел на эту тему мануалы, т.к не юзал никогда, но спасибо за описание интересной возможности, буду использовать
По поводу констант — не смотрел на эту тему мануалы, т.к не юзал никогда, но спасибо за описание интересной возможности, буду использовать
+1
Роутер для субдоменов:
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
':username.site.ru',
array(
'module' => 'users',
'controller' => 'show',
'action' => 'index'
)
);
$plainPathRoute = new Zend_Controller_Router_Route_Static('');
$router->addRoute('users', $hostnameRoute->chain($plainPathRoute));
+1
ещё .htaccess или конфиг для nginx добавить не мешало бы, сам по себе субдоменный роутинг не будет работать :)
0
htaccess стандартный, но в некоторых случая, подозреваю, что-то такое:
Для nginx — не подскажу, а вот под апач:
Просто, многие хостеры не дают ServerAlias прописывать через htaccess.
Спасибо за дополнение, жаль плюсануть не могу
RewriteRule ^(.*)$ %{HTTP_HOST}/$1
RewriteRule ^(.*)\.mysite\.ru(.*) /subdomains/$1$2
Для nginx — не подскажу, а вот под апач:
ServerAlias *.domen.com
Просто, многие хостеры не дают ServerAlias прописывать через htaccess.
Спасибо за дополнение, жаль плюсануть не могу
+1
НЛО прилетело и опубликовало эту надпись здесь
А может всё таки не стоит сравнивать фреймворки для разных языков программирования? Кому то PHP нравится больше, чем Ruby. Либо кто-то не знает Ruby вовсе.
+1
Маршрутизация в Zend Framework — это очень обширная тема, а тут — два абзаца. Жаль, что автор скачет по верхам. Было бы неплохо рассказать также о цепочках маршрутов, о таких частых применениях, как многоязычность, поддомены (уже есть в комментах)
0
Хотел уточнить. Вот тут вот:
не должно ли быть вместо «test» cлово «static» (применительно к примеру в статье)?
[a href="<?php $this->url(array('page'=>'about'), 'test'); ?>"]О проекте[/a]
не должно ли быть вместо «test» cлово «static» (применительно к примеру в статье)?
+1
Проще всего держать роутинг в ресурсах конфига (дефолтный appplication.ini например) где он будет цепляться автоматически (без сета в контроллере/бутстраппере)
resources.router.routes.pages.type = «Zend_Controller_Router_Route_Regex»
resources.router.routes.pages.reverse = «pages/%s»
resources.router.routes.pages.route = «pages/(.*)»
resources.router.routes.pages.defaults.controller = Pages
resources.router.routes.pages.defaults.action = page
resources.router.routes.pages.map.1 = page
resources.router.routes.pages.type = «Zend_Controller_Router_Route_Regex»
resources.router.routes.pages.reverse = «pages/%s»
resources.router.routes.pages.route = «pages/(.*)»
resources.router.routes.pages.defaults.controller = Pages
resources.router.routes.pages.defaults.action = page
resources.router.routes.pages.map.1 = page
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Практикум Zend Framework. Часть вторая: Route и Registry