scherbuk
@scherbuk

Роутинг. Как убрать уровни вложенности?

есть ссылки вида
site.loc/catalog/ees/catalogGroup-31177
site.loc/catalog/bbs/catalogGroup-31232/catalogGroup-31
site.loc/catalog/bvs/catalogGroup-3232/catalogGrou...

вот роут для этих страниц:

_auto:
    pattern: /{url}
    defaults: { _controller: SiteRsrSecurityBundle:ContentTypes:loadUrlPage }
    requirements:
        url: ".+"


Вот метод из ContentTypesController

public function catalogGroupType(Page $page)
    {
        $childGroups = $this->getContentService()->getListPages($page->getId(), new PageFilter('catalogGroup'));

        echo $page->getId();
        if ( /*count($this->data['navPath'][0]) and */ count($childGroups)) {
            $firstPage = current($childGroups);
         //   echo count($this->data['navPath'][0]);
            return $this->redirect($this->convertUrl($firstPage->getUrl()));
        }
        
        $this->data['groups'] = array();
        if (count($childGroups)) {
            $this->data['groups'] = $childGroups;           
        } else {            
            $parentPage = end($this->data['navPath'][0]);
            if ($parentPage)                
                $this->data['groups'] = $this->getContentService()->getListPages($parentPage->getId(), new PageFilter('catalogGroup'));
        }


        $startPage = $this->getRequest()->get('page', 1);
        $idsChildGroup = array_keys($childGroups);


        //Третий уровень
        if (count($idsChildGroup)) {

            $subChildGroups = $this->getContentService()->getListPages($idsChildGroup, new PageFilter('catalogGroup'));
            $idsChildGroup = array_merge($idsChildGroup, array_keys($subChildGroups));
        }

        $idsGroup = array_merge(array($page->getId()), $idsChildGroup);
       
        try {
            $productsQuery = $this->getContentService()->getListPagesQuery($idsGroup, new PageFilter('product', 'p.price, p.title'));
            $this->data['products'] = $this->getPaginator()->paginate($productsQuery, $startPage, 15);
        } catch (\Exception $exc) {
            return $this->pageNotFound();
        }
        
        return $this->renderPage('PageType:catalog_group.html.twig');
    }


как ссылки привести к виду:

site.loc/catalogGroup-31177
site.loc/catalogGroup-31232/catalogGroup-31
site.loc/catalogGroup-3232/catalogGroup-5789/item

Заранее спасибо
  • Вопрос задан
  • 2301 просмотр
Пригласить эксперта
Ответы на вопрос 1
keltanas
@keltanas
Software Developer
Жесть какая.

Почему бы просто не использовать Dynamic Router?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы