Часто требуется в консольном приложении Yii получить гиперссылки на веб-приложение. Например, для почтовых рассылок по крону. По умолчанию консольное приложение ничего не знает о URL веб приложения, но это исправляется через конфиг.
Все заметки с тегами «Yii, CUrlManager»
-
URL в консольном приложении Yii
19 сентября 2012
-
Свои классы для правил роутера Yii
24 мая 2011
В следующей версии Yii появится возможность использовать свой класс для конкретного правила роутера:
array( // стандартное правило CUrlRule '<action:(login|logout)>' => 'site/<action>', // свой класс array( 'class' => 'application.components.MyUrlRule', 'connectionID' => 'db', ), )
Это позволит, например, с лёгкостью реализовать такую штуку, как наличие потенциально конфликтующих URL:
/about /contact /my-cool-blog-post /my-cool-static-page
Код уже в транке, если есть желание или необходимость — можете опробовать. Замечания и предложения приветствуются.
-
CUrlManager::addRules
5 августа 2010
Довольно часто на форумах спрашивали, как добавить свои правила роутинга не из конфига, а, например, из БД или XML, лежащего в модуле.
Теперь это можно сделать при помощи CUrlManager::addRules. Вызывать его необходимо до CWebApplication::processRequest. Всё, что будет добавлено позже будет проигнорировано.
Одним из способов это сделать является использование событий. В данном случае CWebApplication::onBeginRequest.
Например, для подгрузки правил из модулей в main.php пишем:
'onBeginRequest'=>function($event){ $route=Yii::app()->getRequest()->getPathInfo(); $module=substr($route,0,strpos($route,'/')); if(Yii::app()->hasModule($module)) { $module=Yii::app()->getModule($module); if(isset($module->urlRules)) { $urlManager=Yii::app()->getUrlManager(); $urlManager->addRules($module->urlRules); } } return true; },
Код уже ушёл в SVN.