TYPO3: вызов неопределенного метода - PullRequest
1 голос
/ 11 июня 2019

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

Ошибка:

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"

1 Ответ

2 голосов
/ 11 июня 2019

Эта ошибка возникает из-за того, что 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;
    }
}
...