TYPO3 8.7.10: "Неизвестный столбец" sys_file_reference.uid_local: введите "в" где предложение "" в новом расширении со свойством типа файла
Все!
На новом сайте TYPO3 8.7.10 я только что создал новое расширение с помощью Extension Builder. В этом расширении есть объект модели ("FurnitureFamily") со свойством типа файла (я назвал его "символ"). У моего расширения также есть плагин, который отображает список всех семейств мебели. Я создал семейство мебели и новую страницу с моим плагином.
Новый объект модели в 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
в корне папки расширения, поэтому он всегда загружается, даже если статический шаблон не включен.
- Аннотации в классах могут быть неправильными, включая простые ошибки, такие как опечатки. Аннотации и подсказки типов должны быть правильными (возможно, отсутствующий вариант лучше неправильного, но я никогда не пробовал использовать отсутствующие аннотации или подсказки типа).