:-)
  • PHP 25.02.2009


    Продолжаю посты про symfony. Сегодня сделаем динамический роутинг. То есть будем добавлять правила роутинга из php, минуя routing.yml. Это нужно, например, если вы хотите делать страницы вида http://site.com/page1, где page1 может быть создана, может быть удалена и прочее. Дело в том, что указать какой-то общий шаблон нельзя, потому что иначе он будет конфликтовать с дефолтным /:module. Что делать? А вот что.
    Идею я подсмотрел на одном из забугорных блогов, за что большое автору спасибо.

    Собственно для тех, кто не хочет ждать, а хочет кода - кладем это дело в frontendConfiguration.php:

    class frontendConfiguration extends sfApplicationConfiguration {
      public function configure()  {
      $this->dispatcher->connect('routing.load_configuration', array('registerRoutes', 'listenToRoutingLoadConfigurationEvent'));
      }
    }
     
     
    class registerRoutes {
      static public function listenToRoutingLoadConfigurationEvent(sfEvent $event) {
      $routing = $event->getSubject();
     
      $criteria = new Criteria();
      $criteria->clearSelectColumns();
      $criteria->addSelectColumn(StaticPagesPeer::LINK_NAME);
      $pages = StaticPagesPeer::doSelectStmt($criteria);
     
      foreach ($pages->fetch() as $link) {
        $routing->prependRoute(
          'static_'.$link,
          new sfRoute(
           '/'.$link,
          array(
              'module' => 'main', 
              'action' => 'static', 
              'page' => $link)
        ));
        //with slash
         $routing->prependRoute(
            'static_'.$link.'_with_slash',
            new sfRoute(
            '/'.$link.'/',
              array('module' => 'main', 
              'action' => 'static', 
              'page' => $link)
         ));
    }
    }
    }

    Тут я из базы выбираю поля link_name, и создаю правила на их основе. Каким образом это дело крепится к инициализации роутов - я не знаю. На остальные вопросы отвечу в комментариях.


    А еще я писал про:

    1. Документация Symfony
    2. Symfony: теги
    3. Symfony: переключатели

    Tags: , ,

  • Один комментарий

    WP_Modern_Notepad

    Trackbacks

    Оставить комментарий

    Внимание: Комментарии проходят премодерацию. Не надо посылать их несколько раз.