Маршрутизация TYPO3: несколько сегментов пути - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать древовидные URL для некоторых категорий.URL-адреса должны выглядеть следующим образом: /category1/subcategory1/subcategory2.Количество сегментов пути должно быть гибким, так как я не знаю, насколько глубокими будут категории.

Я получил первый сегмент пути, работающий со следующей конфигурацией и пользовательским Mapper:

ProductsPlugin:
  type:              Extbase
  limitToPages:
    - 5
  extension:         MyExt
  plugin:            Products
  routes:
    -
      routePath:   '/{category_title}'
      _controller: 'Products::list'
      _arguments:
        category_title: id
  defaultController: 'Products::list'
  requirements:
    category_title: '[0-9]{1..6}'
  aspects:
    category_title:
      type: ProductsValueMapper

Mapper выглядит следующим образом:

<?php

namespace Vendor\MyExt\Routing\Aspect;

use TYPO3\CMS\Core\Routing\Aspect\PersistedMappableAspectInterface;
use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;

class ProductsValueMapper implements PersistedMappableAspectInterface
{
    use SiteLanguageAwareTrait;

    /**
     * @param string $value
     *
     * @return string|null
     */
    public function generate(string $value): ?string
    {
        /**
         * returns one or more path segments
         * e.g. category1 or category1/subcategory1
         */
        return $slug; 
    }

    /**
     * @param string $value
     *
     * @return string|null
     */
    public function resolve(string $value): ?string
    {
        /**
         * returns the id of the category from the last path segment
         */
        return $id;
    }
}

Для одной категории он работает нормально.Но как только запрашивается подкатегория, код прерывается.Ссылка на подкатегорию содержит только сегмент пути подкатегории, например, /subcategory1, но не один из категории.

Мне понятно, почему это так, поскольку я добавляю только идентификатор подкатегории.в LinkViewHelper: <f:link.action controller="Products" action="list" arguments="{id: 5}">Test Link</f:link.action>.Но я могу

Какие винты мне нужно настроить, чтобы URL-адреса работали также для любой глубины подкатегорий?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Вы должны разрешить / как требования.Требование по умолчанию [^/]+, и вы указали только номер.

Это должно работать:

ProductsPlugin:
  requirements:
    category_title: .+

См. Также документы Symfony-Docs: https://symfony.com/doc/4.1/routing/slash_in_parameter.html

...