TYPO3 8.7.10: "Неизвестный столбец" sys_file_reference.uid_local: введите "в" где предложение "" в новом расширении со свойством типа файла

Все!

На новом сайте TYPO3 8.7.10 я только что создал новое расширение с помощью Extension Builder. В этом расширении есть объект модели ("FurnitureFamily") со свойством типа файла (я назвал его "символ"). У моего расширения также есть плагин, который отображает список всех семейств мебели. Я создал семейство мебели и новую страницу с моим плагином.

Новый объект модели в Extension Builder

Новый объект модели в Extension Builder

/**
 * name
 *
 * @var string
 * @validate NotEmpty
 */
protected $name = '';

/**
 * symbol
 *
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */
protected $symbol = null;

Проблема в том, что вместо отображения списка с моей единственной записью я получаю следующую ошибку:

К сожалению, произошла ошибка! Код: 20180219055419589a6076

С помощью расширения fh_debug я могу получить больше информации об ошибке:

К сожалению, произошла ошибка! Код: 20180219055419589a6076 Неизвестный столбец 'sys_file_reference.uid_local: введите' в 'предложении' код исключения:1472074485 файл:/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.phb: файл: trace: fhde: файл: файл: трассировка: файл: трассировка: файл: трассировка: файл: трассировка: файл: трассировка: файл: трассировка: файл: трассировка: файл: файл трассировки: файл: файл трассировки: файл: трассировка: файл: файл: трассировка: файл: трассировка: файл: файл трассировки: ф: typo3 /sysext/extbase/Classes/Persistence/Generic/Backend.php"строка:226 функция: файл getObjectDataByQuery: /typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php" строка:126 функция:getObjectDyy typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php"строка:113 функция: файл getObjectDataByQuery: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" строка:567 функция:getF: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php "строка:503 функция: файл mapResultToPropertyValue: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMaph:: Функция:mapObjectToClassProperty file: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:186 функция: файл thawProperties: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php "строка:144 функция:mapSingleRow

Любопытно, что когда я удаляю свойство "символ", отображается список (только со свойством "имя").

Будучи новой установкой, я попытался сравнить свою базу данных со спецификацией, но изменений не было.

Мой вопрос: как я могу исправить эту ошибку?

Спасибо.

0 ответов

Вопрос довольно старый, но у меня все еще была эта проблема в TYPO3 версии 9, и я обнаружил, что она связана с построителем расширений, который создает некоторые записи для поля uid_local:type.
Сообщение об ошибке просто блокирует все, потому что для поля не определен тип.

На этом скриншоте видно, что поле с таким именем определено в таблице. sys_file_reference:

Прокручивая длинный список с полями таблицы вниз, можно обнаружить что-то вроде этого:

Есть определение для config.itemsможно найти, в котором есть типичные определения для некоторых элементов, которые можно выбрать. Даже элемент всего один, структура типична для какой-то формы-элемента для выбора. Я могу представить себе такие элементы формы, как выпадающее меню выбора, переключатели или флажки. Все эти элементы имеют такую ​​структуру кода как определение.

Итак, что я сделал для удаления сообщения об ошибке, так это просто определил "тип" для поля:

$tmp_ttnews_vp_columns['uid_local:type']['config']['type'] = 'select';

С другой стороны, поле обычно не отображается, так как таблица sys_file_referenceникогда не следует логике extbase и работает иначе. Так что удалить код в файле довольно просто и полезно.
your_extension/Configuration/TCA/Overrides/sys_file_reference.php
В этой таблице есть блок с определениями для новых или измененных полей, и большую часть кода выше или ниже этого списка можно удалить.

Он находится над определениями столбцов и может быть удален:

И такой блок под нужным кодом тоже можно удалить:

Документация о typeможно найти здесь, в главе внизу также объясняется комбинированная нотация, но не с uid_local, а с файлом:file:type.

Есть много ситуаций и подробностей, почему это не сработало, вот известные случаи, я могу расширить список на основе комментариев позже:

  • Отображение по умолчанию, созданное расширением-построителем, выглядит примерно так:

config.tx_extbase {
persistence {
 classes {

   WDB\TtnewsVp\Domain\Model\FileReference {
     mapping {
       tableName = sys_file_reference
       recordType = Tx_TtnewsVp_FileReference
     }
   }

 }
}
}

вот линия recordType = Tx_TtnewsVp_FileReferenceбеспокоит и вызывает сообщение об ошибке, как описано в вопросе.
Этот тип TypoScript обычно находится в файлеext_typoscript_setup.typoscript в корне папки расширения, поэтому он всегда загружается, даже если статический шаблон не включен.

  • Аннотации в классах могут быть неправильными, включая простые ошибки, такие как опечатки. Аннотации и подсказки типов должны быть правильными (возможно, отсутствующий вариант лучше неправильного, но я никогда не пробовал использовать отсутствующие аннотации или подсказки типа).
Другие вопросы по тегам