<rmcreative>

RSS

Все заметки с тегом «CUrlManager»

Можно уточнить:

    (3)
  1. URL в консольном приложении Yii

    19 сентября 2012

    Часто требуется в консольном приложении Yii получить гиперссылки на веб-приложение. Например, для почтовых рассылок по крону. По умолчанию консольное приложение ничего не знает о URL веб приложения, но это исправляется через конфиг.

    Читаем

    17 комментариев
  2. Свои классы для правил роутера 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
    

    Код уже в транке, если есть желание или необходимость — можете опробовать. Замечания и предложения приветствуются.

    12 комментариев
  3. 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.

    25 комментариев