Я использую TYPO3 13.1.1 и разработал собственное расширение, чтобы отображать на стороне интерфейса некоторые данные, сгенерированные одним из моих контроллеров расширений.
-> Мое расширение было установлено через Composer и отображается на вкладке «Расширение». -> На данный момент мне просто нужно вывести «Hello World!» через плагин
Что я вижу во внешнем интерфейсе: Ошибка «К сожалению, произошла ошибка».
Мой ProductSpaceController.php
:
<?php
namespace Company\Controller;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
class ProductSpaceController extends ActionController
{
public function testAction()
{
return 'Hello World';
}
}
Мой ext_localconf.php
:
<?php
declare(strict_types=1);
use MyCompany\Controller\ProductSpaceController;
use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
defined('TYPO3') or die('Access denied.');
ExtensionUtility::configurePlugin
(
'company',
'displaymatrice',
[
ProductSpaceController::class => 'test',
],
[
ProductSpaceController::class => 'test',
]
);
Мой Configuration/Services.yaml
:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
Company\:
resource: '../Classes/*'
Мой типографский текст:
lib.testoutput = USER_INT // I also tried COA, USER
lib.testoutput < tt_content.list.20.company_displaymatrice
Когда я пытаюсь отобразить в жидкости, я получаю ошибку:
<f:cObject typoscriptObjectPath = "lib.testoutput" />
PS: у меня есть другой «lib.xxx», который уже работает (для моего верхнего меню, моего нижнего колонтитула, моей хлебной крошки, моего переключателя языка и т. д.).
Неа. EXTBASEPLUGIN
— это именно то, что автоматически находится в `tt_content.list.20.company_displaymatrice. Так что не имеет значения, пишете ли вы эти строки самостоятельно или копируете их из существующего блока ;-)
Вы так правы. :-) Не знал этого. Вы никогда не перестанете учиться.
Сообщение «Упс» намеренно не очень подробное. Однако вы можете настроить TYPO3, чтобы он стал немного более разговорчивым (во время разработки или на сервере разработки).
Установите для ApplicationContext значение «Разработка». Например. через файл htaccess
RewriteCond %{HTTP_HOST} ^dev\.example\.com$
RewriteRule .? - E=TYPO3_CONTEXT:Development]
Более подробная информация (и другие возможности настройки) объясняется, например. Используйте контекст приложения TYPO3
Имея более подробное сообщение об ошибке, вы, возможно, сможете продвинуться дальше самостоятельно, в противном случае другие смогут вам помочь лучше.
Решение от @Mogens решило мою проблему. Но спасибо за совет, действительно, это поможет мне лучше понять в следующий раз.
Как упоминал выше Джулиан Хофманн, tt_content.list.20.company_displaymatrice
уже содержит необходимый EXTBASEPLUGIN
объект.
Так что вам не нужна эта строка в вашем TypoScript:lib.testoutput = USER_INT // I also tried COA, USER
Начиная с TYPO3 12, действия контроллера обязательно возвращают экземпляр ResponseInterface. Смотрите здесь:
https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/Extbase/Reference/Controller/ActionController.html#actions
Итак, ваше действие должно выглядеть так:
public function testAction()
{
return $this->htmlResponse('<p>Hello World</p>');
}
Либо активируйте вывод ошибок, как описано Джулианом Хофманном, либо загляните в var/log/typo3_*.log
и опубликуйте ошибку, которая регистрируется там при вызове внешнего интерфейса.
Ваше решение решит мою проблему. Спасибо!
Это должно вам помочь: docs.typo3.org/m/typo3/reference-typoscript/main/en-us/…