Как переслать switchableControllerActions в другое действие контроллера в TYPO3 - PullRequest
0 голосов
/ 09 января 2020

Моя конфигурация плагина выглядит следующим образом:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin('Orbit.Navigator', 'mission', [
        \Orbit\Navigator\Controller\SpaceXController::class => 'cpt, cpr, shuttle',
        \Orbit\Navigator\Controller\Conf\FlightController::class => 'pressure,target,timer',
        \Orbit\Navigator\Controller\Conf\WeatherController::class => 'mav,hub',
]);

У меня есть эта настройка,

10 = USER_INT
10 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    extensionName = Navigator
    pluginName = mission
    vendorName = Orbit

    switchableControllerActions {
        SpaceX{
            1 = shuttle
        }
    }
}

Запрос попадает в метод shuttleAction() в SpaceXController. После обработки, как мне переслать timerAction() в FlightController?

Использование;

$this->forward('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());

действует как $_POST и приводит к;

(1/2) #1278450972 TYPO3\CMS\Extbase\Reflection\Exception\UnknownClassException
Class does not exist. Reflection failed.

Использование;

$this->redirect('timer', 'Flight', $this->request->getControllerExtensionName(), $this->request->getArguments());

действует как $_GET (перенаправляет на другую страницу), и страница выдает ошибку с жалобой на "слишком много перенаправлений".

Я могу переслать другое действие в том же контроллере, но как переслать другое действие в другом контроллере?

1 Ответ

0 голосов
/ 09 января 2020

Так что получается, что switchableControllerActions устарела по самым причинам, упомянутым выше. Он переопределяет исходную конфигурацию плагинов во время выполнения. Но я благодарен, что не буду полагаться на это. Хотя в уведомлении об устаревании упоминается об этом, в нем также говорится, что они удаляют его за то, что он не придерживается своей парадигмы для плагинов. Чтобы процитировать из уведомления об устаревании таким образом,

switchableControllerActions были помечены как устаревшие и будут удалены в одной из следующих основных версий TYPO3, возможно, версия 11.0 или 12.0 .

switchableControllerActions используются для переопределения разрешенного набора контроллеров и действий через опечатки или гибкие формы плагинов. Хотя удобно для повторного использования одного и того же плагина для множества различных вариантов использования, оно также очень проблематично c полностью переопределяет исходная конфигурация, определенная с помощью \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin.

switchableControllerActions, поэтому имеют плохие последствия , которые исправляют [sic] их удаление.

Прежде всего, switchableControllerActions переопределяет исходную конфигурацию плагинов во время выполнения и, возможно, в зависимости от условий, которые противоречат идее \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin, являющейся авторитетным способом определения конфигурации.

Использование одного и того же плагина в качестве точки входа для множества различных функций противоречит идее плагина, служащего одной конкретной цели. Коммутационные действия контроллера позволяют создать один центральный плагин, который обо всем позаботится.

Источник: Устаревание: # 89463 - Устаревание switchableControllerActions

Я полностью согласен это хороший шаг.

Есть способ обойти это, что стало возможным благодаря возможности TYPO3 для нескольких определений плагинов в файле конфигурации расширения (ext_localconf. php) одного расширения. При этом можно определить отдельный плагин для любого отдельного действия, необходимого в TypoScript или FlexForm.

...