Model Typo3 9 | Extbase扩展:某些值未从后端tca字段保存到数据库
我为typo39.5.8编写了一个extbase扩展。我从extension builder开始,手动完成了扩展。 现在我意识到一种奇怪的行为。当我打开扩展记录进行编辑时,后端表单呈现良好,所有字段都正确地填充了相关的数据库条目。但是我只能保存一些字段的值。其他值也会丢失。 如果我直接在数据库中编辑这些值,它们将在后端表单中正确显示。所以getter按预期工作,setter不按预期工作 这是我的设置,简化为一个具有这种行为的字段(“myExtension”和“myVendor”在这里只是占位符,不在真实代码中。不希望我的客户姓名显示在这里): myExtension/ext_tables.sqlModel Typo3 9 | Extbase扩展:某些值未从后端tca字段保存到数据库,model,typo3,extbase,typo3-9.x,Model,Typo3,Extbase,Typo3 9.x,我为typo39.5.8编写了一个extbase扩展。我从extension builder开始,手动完成了扩展。 现在我意识到一种奇怪的行为。当我打开扩展记录进行编辑时,后端表单呈现良好,所有字段都正确地填充了相关的数据库条目。但是我只能保存一些字段的值。其他值也会丢失。 如果我直接在数据库中编辑这些值,它们将在后端表单中正确显示。所以getter按预期工作,setter不按预期工作 这是我的设置,简化为一个具有这种行为的字段(“myExtension”和“myVendor”在这里只是占位符,
#
# Table structure for table 'tx_myExtension_domain_model_kategorie'
#
CREATE TABLE tx_<myExtension>_domain_model_kategorie (
dh_description text,
);
我已经重新安装了扩展,清除了缓存,清除了typo3temp等等。看起来,这个模型没有任何效果。如果我重命名该文件或在其中写入语法错误,typo3就不麻烦了
有什么想法吗
如前所述,以下是完整的TCA:
<?php
return [
'ctrl' => [
'title' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie',
'label' => 'kategoriename',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'kategoriename,dh_description,dh_meta_keywords,dh_meta_description',
'iconfile' => 'EXT:myExtension/Resources/Public/Icons/tx_myExtension_domain_model_kategorie.gif'
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, orig_id, kategoriename, ordnung, zeitstempel, in_teaser, dh_description, dh_meta_keywords, dh_meta_description, kurstypen',
],
'types' => [
'1' => ['showitem' => 'hidden, in_teaser, kategoriename, dh_description, ordnung, kurstypen,
--div--;SEO Data, dh_meta_keywords, dh_meta_description,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_db.xlf:tabs.seo, dh_description, dh_meta_keywords, dh_meta_description'],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'special' => 'languages',
'items' => [
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-1,
'flags-multiple'
]
],
'default' => 0,
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_myExtension_domain_model_kategorie',
'foreign_table_where' => 'AND {#tx_myExtension_domain_model_kategorie}.{#pid}=###CURRENT_PID### AND {#tx_myExtension_domain_model_kategorie}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
't3ver_label' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true
]
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'orig_id' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.orig_id',
'config' => [
'type' => 'input',
'size' => 4,
'eval' => 'int'
]
],
'kategoriename' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kategoriename',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'ordnung' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.ordnung',
'config' => [
'type' => 'input',
'size' => 4,
'eval' => 'int'
]
],
'zeitstempel' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.zeitstempel',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 10,
'eval' => 'datetime',
'default' => time()
],
],
'in_teaser' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.in_teaser',
'config' => [
'type' => 'check',
'items' => [
'1' => [
'0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
]
],
'default' => 0,
]
],
'dh_description' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_description',
'config' => [
'type' => 'text',
'enableRichtext' => true,
'richtextConfiguration' => 'minimal',
'fieldControl' => [
'fullScreenRichtext' => [
'disabled' => false,
],
],
'cols' => 40,
'rows' => 15,
'eval' => 'trim',
],
],
'dh_meta_keywords' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_keywords',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'dh_meta_description' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_description',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'kurstypen' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kurstypen',
'config' => [
'type' => 'inline',
'foreign_table' => 'tx_myExtension_domain_model_kurstypen',
'foreign_field' => 'kategorie',
'maxitems' => 9999,
'appearance' => [
'collapseAll' => 1,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => 1,
'showPossibleLocalizationRecords' => 1,
'showAllLocalizationLink' => 1
],
],
],
],
];
感谢巴斯蒂安。他给我带来了正确的想法。找到了错误
有些领域在“类型”中出现了双精度,因此只有最后一次出现的内容保存到数据库中。:-) 多亏了巴斯蒂安。他给我带来了正确的想法。找到了错误
有些领域在“类型”中出现了双精度,因此只有最后一次出现的内容保存到数据库中。:-) 你能发布你的整个TCA,甚至是头部部分(ctrl、界面、类型)吗?是的。我已经把它贴在上面了,非常感谢巴斯蒂安。你给了我正确的想法。找到了错误。我正在寻找的一些在“类型”中出现双精度的领域:-):D。你能发布你的整个TCA,甚至是头部部分(ctrl、界面、类型)吗?是的。我已经把它贴在上面了,非常感谢巴斯蒂安。你给了我正确的想法。找到了错误。有些领域在‘类型’:-):D中出现了双精度,这正是我要寻找的。
namespace MyVendor\myExtension\Domain\Model;
class Kategorie extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/**
* dhDescription
*
* @var string
*/
protected $dhDescription = '';
/**
* Returns the dhDescription
*
* @return string $dhDescription
*/
public function getDhDescription()
{
return $this->dhDescription;
}
/**
* Sets the dhDescription
*
* @param string $dhDescription
* @return void
*/
public function setDhDescription($dhDescription)
{
$this->dhDescription = $dhDescription;
}
<?php
return [
'ctrl' => [
'title' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie',
'label' => 'kategoriename',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'kategoriename,dh_description,dh_meta_keywords,dh_meta_description',
'iconfile' => 'EXT:myExtension/Resources/Public/Icons/tx_myExtension_domain_model_kategorie.gif'
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, orig_id, kategoriename, ordnung, zeitstempel, in_teaser, dh_description, dh_meta_keywords, dh_meta_description, kurstypen',
],
'types' => [
'1' => ['showitem' => 'hidden, in_teaser, kategoriename, dh_description, ordnung, kurstypen,
--div--;SEO Data, dh_meta_keywords, dh_meta_description,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_db.xlf:tabs.seo, dh_description, dh_meta_keywords, dh_meta_description'],
],
'columns' => [
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'special' => 'languages',
'items' => [
[
'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages',
-1,
'flags-multiple'
]
],
'default' => 0,
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_myExtension_domain_model_kategorie',
'foreign_table_where' => 'AND {#tx_myExtension_domain_model_kategorie}.{#pid}=###CURRENT_PID### AND {#tx_myExtension_domain_model_kategorie}.{#sys_language_uid} IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
't3ver_label' => [
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.visible',
'config' => [
'type' => 'check',
'renderType' => 'checkboxToggle',
'items' => [
[
0 => '',
1 => '',
'invertStateDisplay' => true
]
],
],
],
'starttime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'endtime' => [
'exclude' => true,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'datetime,int',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
'behaviour' => [
'allowLanguageSynchronization' => true
]
],
],
'orig_id' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.orig_id',
'config' => [
'type' => 'input',
'size' => 4,
'eval' => 'int'
]
],
'kategoriename' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kategoriename',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'ordnung' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.ordnung',
'config' => [
'type' => 'input',
'size' => 4,
'eval' => 'int'
]
],
'zeitstempel' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.zeitstempel',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 10,
'eval' => 'datetime',
'default' => time()
],
],
'in_teaser' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.in_teaser',
'config' => [
'type' => 'check',
'items' => [
'1' => [
'0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
]
],
'default' => 0,
]
],
'dh_description' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_description',
'config' => [
'type' => 'text',
'enableRichtext' => true,
'richtextConfiguration' => 'minimal',
'fieldControl' => [
'fullScreenRichtext' => [
'disabled' => false,
],
],
'cols' => 40,
'rows' => 15,
'eval' => 'trim',
],
],
'dh_meta_keywords' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_keywords',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'dh_meta_description' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.dh_meta_description',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
'kurstypen' => [
'exclude' => true,
'label' => 'LLL:EXT:myExtension/Resources/Private/Language/locallang_db.xlf:tx_myExtension_domain_model_kategorie.kurstypen',
'config' => [
'type' => 'inline',
'foreign_table' => 'tx_myExtension_domain_model_kurstypen',
'foreign_field' => 'kategorie',
'maxitems' => 9999,
'appearance' => [
'collapseAll' => 1,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => 1,
'showPossibleLocalizationRecords' => 1,
'showAllLocalizationLink' => 1
],
],
],
],
];