2015-05-18 5 views
0

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

Однако шаблон жидкости не показывает ничего, и если я прохожу например, суб-проекта в 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(); 
} 

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

Любые идеи, как исправить это?

ответ

0

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

+0

Пожалуйста, задайте вопрос как можно скорее и закройте его. –

1

Я не знаю, на какой версии 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', 
     ), 
    ), 
+0

Это интересная информация - спасибо за это. Тем не менее, у меня просто был результат emtpy запроса, который вызывает сообщение об ошибке в отладочном представлении. Btw. Я на 4.7. – Christoph

+0

Вы определили «подпроект» поля в своей конфигурации TCA? Если нет, вы должны установить его как 'passthrough (я отредактировал свой ответ). –