Typo3:使用新的TextField扩展FAL SYS_FILE_REFERY



我只是尝试使用新的TextField"版权"来扩展sys_file_reference表,只是正常的extbase方式。现场表现出像魅力一样的工作。但是,当我使用SYS_FILE_REFERY关系保存记录时,它不会添加参考。保存后只是空的...是否是带有常规媒体字段的页面,或者是我的自定义扩展之一。有人知道我缺少什么?

非常感谢您的任何帮助!

TCA:

$fileReferenceColumns = [
'copyright' => [
    'exclude' => true,
    'label' => $ll . 'sys_file_reference.copyright',
    'config' => [
        'type' => 'input',
        'size' => 20,
        'max' => 255,
        'eval' => 'null',
        'default' => null,
    ]
]];
TYPO3CMSCoreUtilityExtensionManagementUtility::addTCAcolumns('sys_file_reference', $fileReferenceColumns);
TYPO3CMSCoreUtilityExtensionManagementUtility::addFieldsToPalette(
    'sys_file_reference',
    'imageoverlayPalette',
    'copyright'
);

sql:

CREATE TABLE sys_file_reference (
  copyright VARCHAR(255) DEFAULT ''          NOT NULL,
);

模型:

class FileReference extends AbstractEntity
{
    /**
     * uid of a sys_file
     *
     * @var integer
     */
    protected $originalFileIdentifier;
    /**
     * @var TYPO3CMSExtbaseDomainModelFile
     */
    protected $file;
    /**
     * @var string
     */
    protected $copyright;
    /**
     * setOriginalResource
     *
     * @param TYPO3CMSCoreResourceFileReference $originalResource
     * @return void
     */
    public function setOriginalResource(TYPO3CMSCoreResourceFileReference $originalResource)
    {
        $this->originalResource = $originalResource;
        $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid();
    }
    /**
     * @return TYPO3CMSExtbaseDomainModelFile
     */
    public function getFile()
    {
        return $this->file;
    }
    /**
     * @param TYPO3CMSExtbaseDomainModelFile $file
     */
    public function setFile($file)
    {
        $this->file = $file;
        $this->originalFileIdentifier = $file->getUid();
    }
    /**
     * @return string
     */
    public function getCopyright()
    {
        return $this->copyright;
    }
    /**
     * @param string $copyright
     */
    public function setCopyright($copyright)
    {
        $this->copyright = $copyright;
    }
}

typoscript:

config.tx_extbase {
    persistence {
        classes {
            InterlutionsItlGalleryDomainModelFileReference {
                mapping {
                    tableName = sys_file_reference
                    columns {
                        uid_local.mapOnProperty = originalFileIdentifier
                        uid_local.mapOnProperty = file
                        votes.mapOnProperty = votes
                    }
                }
            }
        }
        objects {
            TYPO3CMSExtbaseDomainModelFileReference.className = InterlutionsItlGalleryDomainModelFileReference
        }
    }
}

问题是,如果未填写新字段"版权",则试图将值保存为null。但是SQL定义不允许NULL。

因此,将SQL定义更改为例如以下工作(查看sys_file_reference标题和描述的字段定义(:

CREATE TABLE sys_file_reference (
  copyright TINYTEXT,
);

我知道这真的很简单...

嘿,欢迎来到stackoverflow :-)我想您的所有参考都会丢失,因为您完全"替换"了原始的fileReference对象:

config.tx_extbase.objects.TYPO3CMSExtbaseDomainModelFileReference.className = InterlutionsItlGalleryDomainModelFileReference

在您的整个系统中,extbase fialerference将被您的归档替换。因此,我认为有关每项归档的重要信息不会存储到DB,因为您的"覆盖" - 模型缺少大量的setter/getters,因为您的模型仅扩展了抽象。

请尝试扩展现有的归档 - 这可能会解决问题:

class FileReference extends TYPO3CMSExtbaseDomainModelFileReference

请注意,使用config.tx_extbase.objects的覆盖类可能会导致其他扩展名破坏。您可以考虑使用plugin.tx_yourextension.objects覆盖它以进行扩展。无论如何,您的新字段都可以使用file.properties.popyright在流体模板中访问默认情况下。

另一件事是:由于您需要版权字段,因此该扩展名也相同:https://typo3.org/extensions/repository/view/tgm_copyright

最新更新