«Класс не существует.

Я обновляю веб-сайт с TYPO3 8 до TYPO3 9

Весь код работал хорошо с TYPO3 8.
Теперь я должен адаптироваться, как это было с еще более ранним TYPO3 (TCA, доктрина, ...), и выдает некоторые ошибки.

На данный момент у меня есть проблема для некоторых страниц, я получаю только эту ошибку (в небольших модификациях):

(1/2) # 1278450972 TYPO3 CMS Extbase Reflection Exception UnknownClassException

Класс VendorName VendorExtensionName Domain Model TYPO3 CMS Extbase Persistence ObjectStorage не существует. Отражение не удалось.

Я предполагаю, что это вызвано этим кодом:

<?php
namespace VendorNameVendorExtensionNameController;
use TYPO3CMSExtbaseAnnotationInject;

class AnsprechpartnerController extends TYPO3CMSExtbaseMvcControllerActionController {

    /**
     * ansprechpartnerRepository
     *
     * @Inject
     * @var VendorNameVendorExtensionNameDomainRepositoryAnsprechpartnerRepository
     */
    protected $ansprechpartnerRepository;

    [...]

    /**
     * action showDetail
     *
     * @return void
     */
    public function showDetailAction() {
        $pids = $this->settings['pids'];
        $this->settings['ansprechpartner'] = explode(',', $this->settings['ansprechpartner']);
        foreach ($this->settings['ansprechpartner'] as $uid) {
            $person = $this->ansprechpartnerRepository->findByUid($uid);  

    [...]

так как эта последняя строка находится в стеке отладки.

Расширение имеет 8 видов записей, которые связаны друг с другом. Я предполагаю, что из-за этого отношения определяются lazy и используются объектные хранилища.

<?php
namespace VendorNameVendorExtensionNameDomainModel;
use TYPO3CMSExtbaseAnnotationORMLazy;
/**
 *
 * @package vendor_extension_name
 *
 */
class Ansprechpartner extends TYPO3CMSExtbaseDomainObjectAbstractEntity {

[...]


/**
 * Organisationseinheit
 *
 * @var TYPO3CMSExtbasePersistenceObjectStorage<VendorNameVendorExtensionNameDomainModelOrganisation>
 * @Lazy
 */
protected $organisationseinheit;

/**
 * Dienstleistungen
 *
 * @var TYPO3CMSExtbasePersistenceObjectStorage<VendorNameVendorExtensionNameDomainModelAnsprechpartnerDienstleistung>
 * @Lazy
 */
protected $dienstleistungen = NULL;

[...]

Но здесь порядок перепутанных классов обратный.
Тем не менее, это может быть причиной смешивания / объединения существующих пространств имен VendorNameVendorExtensionNameDomainModel [ Ansprechpartner ] и
TYPO3CMSExtbasePersistenceObjectStorage со странным именем класса
VendorNameVendorExtensionNameDomainModelTYPO3CMSExtbasePersistenceObjectStorage , который, конечно, не существует.


Редактировать:
вставить использование
use TYPO3CMSExtbaseAnnotationInject; а также
use TYPO3CMSExtbaseAnnotationORMLazy; вместо того, чтобы встроить в lazy , что не имеет никакого эффекта.

Всего 1 ответ


В версии 9.0 аннотация @lazy была заменена на @TYPO3CMSExtbaseAnnotationORMLazy .

Может быть, это может помочь: https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.0/Feature-83078-ReplaceLazyWithTYPO3CMSExtbaseAnnotationORMLazy.html


Есть идеи?

10000