Symfony Текущий маршрут

scorpion-ds

Новичок
У меня возникла вроде вполне банальная задача, но найти красивого решения не не смог.

У меня есть два маршрута:
Код:
cs_blog_rubric:
    path:    /{rubric_slug}/
    defaults: { _controller: CSBlogBundle:Default:index }
    requirements:
        _method:  GET
        rubric_slug: "[0-9a-zA-Z_\-]+"

cs_blog_show:
    pattern:  /{rubric_slug}/{slug}_{id}.{_format}
    defaults: { _controller: CSBlogBundle:Default:show }
    requirements:
        _method:  GET
        _format:  html
        rubric_slug: "[0-9a-zA-Z_\-]+"
        id: \d+
cs_blog_rubric - показывает текущую рубрику и посты в ней;
cs_blog_show - показывает сам пост.

Также строится меню с использованием "KNP Menu", оно вполне успешно показывает текущий пункт, когда мы находимся в рубрике, но когда мы переходим уже к посту, то разумеется оно не может отследить текущий раздел.

Так как он у меня "упоминается" в URL поста:
/app_dev.php/blog/rubrika-3/
/app_dev.php/blog/rubrika-3/
prosto-novost_3.html

То я с использую функцию strpos:
PHP:
public function rubricSidebarMenu(FactoryInterface $factory)    {
       
        $menuItems = $this->container->get('menu')->getRubricSidebarMenu();
        $menu = $factory->createItem('root');
       
        $request = $this->container->get('request')->createFromGlobals();
               
        foreach ($menuItems as $item)
        {
            $menu->addChild($item->getTitle(), array('route' => 'cs_blog_rubric', 'routeParameters' => array('rubric_slug' => $item->getSlug())));
           
            if (strpos($request->getRequestUri(), $menu->getChild($item->getTitle())->getUri()) === 0)
            {
                $menu->getChild($item->getTitle())->setCurrent(true);
            }
           
        }
        return $menu;
       
    }
оно то все работает, но мне кажется такое решение не очень красивое и должен быть более "симфоничное" решение.

Подскажите другое решение данной задачи?
 

hell0w0rd

Продвинутый новичок
На сколько мне известно - других решений нет. Единственное - не стоит контейнер дергать прямо из функции, можно запихнуть класс меню в DI и инжектить в конструктор нужные зависимости. Ну и request deprecated в контейнере.
 
Сверху