Persisting extbase FileReference does not work with default TCA configuration
I try to programatically create a sys_file_reference in a field of a custom domain object in an extbase FE plugin.
This is the code I use:
/* @var $coverImage \TYPO3\CMS\Extbase\Domain\Model\FileReference */ $coverImage = $this->objectManager->get('TYPO3\CMS\Extbase\Domain\Model\FileReference'); $imageReference = $this->resourceFactory->createFileReferenceObject(array( 'uid_local' => $imageFile->getUid(), 'uid_foreign' => \uniqid('NEW_'), 'uid' => \uniqid('NEW_') )); $coverImage->setOriginalResource($imageReference); $object->setCoverImage($coverImage);
Sadly, this does not work, as the fields "tablenames" and "table_local" in the sys_file_reference will be empty.
The cover_image field is defined in the TCA as follows:
'cover_image' => array( 'exclude' => 1, 'label' => 'LLL:EXT:openimmo_import/Resources/Private/Language/locallang_db.xlf:tx_openimmoimport_domain_model_realestateobject.cover_image', 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( 'coverImage', array( 'maxitems' => 1 ), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] ), ),
As you can see, it uses the standard recommended function getFileFieldTCAConfig to generate the field definition.
Now it does work if you add "tablenames" and "table_local" to "foreign_match_fields", like this:
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( 'coverImage', array( 'maxitems' => 1, 'foreign_match_fields' => array( 'tablenames' => 'tx_openimmoimport_domain_model_realestateobject', 'table_local' => 'sys_file' ) ), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] ),
This is also how the upload_example extension does it: https://github.com/helhum/upload_example/blob/master/Configuration/TCA/tx_uploadexample_domain_model_example.php#L136
Is this intended? If it is, why doesn't getFileFieldTCAConfig do it like this by default?
Updated by Wouter Wolters over 6 years ago
- Status changed from New to Closed
This not the right place to ask questions. This a bugtracker. Please use the Mailinglist/Forum for questions.
Forum can be found at https://forum.typo3.org/
I will close this ticket to keep the bugtracker clean.
Updated by Philipp Kerling over 6 years ago
I've noticed that at least 'tablenames' does seem to get set when the domain model uses an ObjetStorage for multiple FAL references. 'table_local' is still empty.So I'd say fix it in Extbase, since the TCA should be OK the way it is.
- 'tablenames' can be inferred from TCA 'foreign_table_field' which is correctly set. This needs to get fixed in Extbase when persisting properties that are a single FileReference (those properties currently have some other problems, but I'll file separate bug reports for that)
- 'table_local' should (always) be set to 'sys_file' because that is the default value for the column given in the 'sys_file_reference' TCA.