TYPO3: вызов неопределенного метода

Я использую TYPO3 версии 7.6.32 с системным расширением News, и время от времени я получаю сообщение об ошибке, которое затем исчезает без каких-либо изменений:

Ошибка:

Call to undefined method 
GeorgRinger\News\Domain\Model\FileReference::getType()

Error thrown in file /var/www/www.example.com/typo3conf/ext/in_news/Classes/ViewHelpers/IsVideoPlacedViewHelper.php in line 25.

Поэтому я пошел посмотреть в знаменитом файле IsVideoPlacedViewHelper.php. И это то, что я нахожу в строке 24:

foreach ($media as $key => $mediaEl) {
    if ($mediaEl->getType() >= 101 && $mediaEl->getType() <= 103 ) {
        return true;
    }
}

Когда я проверил файл журнала, я обнаружил следующее:

2019/06/10 08:17:51 [error] 119340#119340: *4509 FastCGI sent in stderr: "PHP message: http://www.example.com/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: Call to undefined method GeorgRinger\News\Domain\Model\FileReference::getType() | Error thrown in file /var/www/www.example.com/typo3conf/ext/in_news/Classes/ViewHelpers/IsVideoPlacedViewHelper.php in line 25. Requested URL: http://www.example.com/video/" while reading response header from upstream, client: 188.40.199.147, server: in.fo, request: "GET /video/ HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "www.example.com"

person MAZ    schedule 11.06.2019    source источник


Ответы (1)


Эта ошибка возникает из-за того, что IsVideoPlacedViewHelper не поддерживает класс TYPO3\CMS\Extbase\Domain\Model\FileReference. (Расширение news просто расширяет эту модель предметной области.) Вместо этого он ожидает TYPO3\CMS\Core\Resource\FileReference, которое может быть получено с помощью $mediaEL->getOriginalResource().

Поэтому вам следует обновить свой IsVideoPlacedViewHelper, чтобы учесть это:

use TYPO3\CMS\Extbase\Domain\Model\FileReference as ExtbaseFileReference;

foreach ($media as $key => $mediaElement) {
    if ($mediaElement instanceof ExtbaseFileReference) {
        $mediaElement = $mediaElement->getOriginalResource();
    }

    $type = $mediaElement->getType();

    if ($type >= 101 && $type <= 103) {
        return true;
    }
}
person Mathias Brodala    schedule 11.06.2019
comment
Спасибо, @Mathias Brodala! Не могли бы вы предоставить мне дополнительную информацию о том, как обновить IsVideoPlacedViewHelper? - person MAZ; 11.06.2019
comment
Большое спасибо! Буду тестировать и следить за логом, так как ошибка появляется не всегда. - person MAZ; 12.06.2019