Сообщение & quot; Вы никогда не должны видеть это предупреждение. & Quot; в расширении Typo3 на основе Extbase

У меня есть расширение на основе Extbase для Typo3, которое имеет иерархическую модель данных. Мне пришлось вставить дополнительный слой к этой модели, т.е. Project contains multiple items, Теперь у меня есть Project contains multiple sub-projects а также Sub-project contains multiple items, Все моделируется с использованием таблиц MM-отношений и работает в бэкэнде. Я могу добавлять, удалять, сортировать подпроекты и элементы.

Тем не менее, шаблон жидкости ничего не показывает, и если я передам, например, подпроекту t3lib_utilities_debug::Debug, Я получил

Вы никогда не должны видеть это предупреждение. Если вы делаете, вы, вероятно, использовали PHP
функции массива, такие как current () на
Tx_Extbase_Persistence_ObjectStorage. Чтобы получить первый результат,
Вы можете использовать методы rewind () и current ().

при печати ObjectStorage для предметов. Я предполагаю, что MM-отношение, которое я добавил, каким-то образом нарушено, но я не могу понять, как. Кроме того, кажется, что __construct метод доменной модели не вызывается (я добавил отладочный вывод, который не печатается).

Перечисление работает, если я передаю результат вызова findAll репозитория, но он не работает для моих отфильтрованных вызовов (которые работали до того, как я добавил дополнительный слой). Метод фильтрации выглядит, например, для элемента

public function findBySubProject(SubProject $p) {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(false);
$query->matching($query->equals('subproject', $p));
return $query->execute();
}

Как я уже сказал, запрос дает результаты, но они каким-то образом нарушены. их отношения.

Есть идеи, как это исправить?

0

Решение

Я не знаю, на какой версии Extbase вы разрабатываете.

Но на TYPO3 4.6+ Вы должны знать о object а также reflection кэширование. Во время разработки вы можете отключить это caching от:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 't3lib_cache_backend_NullBackend';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 't3lib_cache_backend_NullBackend';

Поскольку ваша проблема связана с изменениями в вашей модели, вы должны попытаться усечь таблицы cf_extbase_object, cf_extbase_object_tags, cf_extbase_reflection а также cf_extbase_reflection_tags после любых изменений.

Если это не поможет вам решить вашу проблему, то вы должны дать нам больше информации о вашей конфигурации (особенно конфигурации TCA, потому что Extbase полагается на нее).

Как проверить Extbase QueryResult

$items = $this->itemRepository->findAll();

echo count($items);

if ($items) {

echo '<pre>';
foreach ($items as $item) {
print_r($item);
}
echo '</pre>';
}

— редактировать —

Вы определили поле subproject в твоём ТСА? Это должно быть как минимум доступно как тип passtrough:

    'subproject' => array(
'config' => array(
'type' => 'passthrough',
),
),
1

Другие решения

В случае, если кто-то еще сталкивается с той же проблемой: я случайно использовал объект без элементов в качестве тестового объекта. Если вы попытаетесь перечислить / отладить / отобразить пустой ObjectStorageпредупреждение напечатано.

0

По вопросам рекламы [email protected]