Я обновляю веб-сайт с 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 VendorName\VendorExtensionName\Controller;
use TYPO3\CMS\Extbase\Annotation\Inject;
class AnsprechpartnerController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* ansprechpartnerRepository
*
* @Inject
* @var \VendorName\VendorExtensionName\Domain\Repository\AnsprechpartnerRepository
*/
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 VendorName\VendorExtensionName\Domain\Model;
use TYPO3\CMS\Extbase\Annotation\ORM\Lazy;
/**
*
* @package vendor_extension_name
*
*/
class Ansprechpartner extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
[...]
/**
* Organisationseinheit
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VendorName\VendorExtensionName\Domain\Model\Organisation>
* @Lazy
*/
protected $organisationseinheit;
/**
* Dienstleistungen
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\VendorName\VendorExtensionName\Domain\Model\AnsprechpartnerDienstleistung>
* @Lazy
*/
protected $dienstleistungen = NULL;
[...]
Но здесь порядок смешанных классов меняется на противоположный.
Тем не менее это может быть причиной смешивания / объединения существующих пространств имен VendorName\VendorExtensionName\Domain\Model
[\Ansprechpartner
] и
\TYPO3\CMS\Extbase\Persistence\ObjectStorage
на странное имя класса
VendorName\VendorExtensionName\Domain\Model\TYPO3\CMS\Extbase\Persistence\ObjectStorage
, который, конечно, не существует.
Edit:
вставить использование
use TYPO3\CMS\Extbase\Annotation\Inject;
и
use TYPO3\CMS\Extbase\Annotation\ORM\Lazy;
вместо встроенных inject
и lazy
, что не имеет никакого эффекта.
Редактировать 2:
Инициализация хранилищ (пример из класса выше):
class Ansprechpartner extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
:
/**
* __construct
*
* @return Ansprechpartner
*/
public function __construct() {
$this->initStorageObjects();
}
/**
* Initializes all ObjectStorage properties.
*
* @return void
*/
protected function initStorageObjects() {
$this->organisationseinheit = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
$this->dienstleistungen = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
: