Как заставить виджет работать с несколькими действиями из Typoscript? - PullRequest
1 голос
/ 09 апреля 2019

При создании нового некэшированного виджета для входа / выхода из системы / регистрации пользователей во внешнем интерфейсе я не могу заставить его работать.Как я могу вызвать два разных контроллера из опечатки (см. Код ниже)?

Использую TYPO3 9.5.Знание того, как его создать, важно, потому что эта информация мне понадобится при создании многих других для различных целей.Ранее я создал сложную систему входа в систему без виджета / контроллера / действия в TYPO3.

В ext_localconf.php есть;

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    VendorName.ExtensionName, 
    PluginName, 
    [
    'Frontend' => 'index',
    'Account' => 'index,login,logout,register'
], [
    'Account' => 'login,logout,register'
]);

Под структурой папок Classes/Controller есть класс VendorName\ExtensionName\Controller\AccountController который имеет;

class AccountController extends AbstractWidgetController {

    /**
     * @var array
     */
    protected $supportedRequestTypes = [
        Request::class,
        WidgetRequest::class
    ];


    public function initializeAction() {

    }

    public function indexAction() {

    }

    public function loginAction() {

        return $this->view->assign('raw', 'Hello World');
    }

    public function logoutAction() {

    }

    public function registerAction() {

    }


    /**
     * Handles a request. The result output is returned by altering the given response.
     *
     * @param \TYPO3\CMS\Extbase\Mvc\RequestInterface $request The request object
     * @param \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response The response, modified by this handler
     *
     * @return void
     * @api
     */
    public function processRequest(RequestInterface $request, ResponseInterface $response) {

        #ActionController::processRequest($request, $response);
    }
}

А в файле ts есть;

page = PAGE
page {
    ...

    10 = USER
    10 {
        ...

        userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
        vendorName = VendorName
        extensionName = ExtensionName
        pluginName = PluginName

    }
}

...

5 = USER_INT
5 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    vendorName = VendorName
    extensionName = ExtensionName
    pluginName = PluginName
    controller = Account
    action = login
}

При запуске этого кода PAGE ts создает страницу с помощью действия индекса контроллера Frontend, которое возвращаетсырой HTML через жидкий шаблон.Но когда я добавляю часть USER_INT, TYPO3 не хватает памяти и отображает пустую страницу.

1 Ответ

2 голосов
/ 09 апреля 2019

Виджеты - это тип ViewHelper, используемый в шаблонах Fluid.Из того, что вы описываете, я думаю, что вы хотите плагин.Ваш класс Controller должен расширяться TYPO3\CMS\Extbase\Mvc\Controller\ActionController, а не TYPO3\CMS\Fluid\ViewHelpers\Widget\Controller\AbstractWidgetController для этого.

...