
Продолжаю посты про 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.'_wish_slash', new sfRoute( '/'.$link.'/', array('module' => 'main', 'action' => 'static', 'page' => $link) )); } } }
Тут я из базы выбираю поля link_name, и создаю правила на их основе. Каким образом это дело крепится к инициализации роутов - я не знаю. На остальные вопросы отвечу в комментариях.
А еще я писал про:










Февраль 25th, 2010 at 16:05
Ошибочка! ))
’static_’.$link.’_wish_slash’,
wish -> with
p.s.: ну или wishes грамотнее тогда )