Проблемы с новыми созданными sys_file_refences - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать sys_file_references в задаче планировщика в TYPO3 7.6.

Но в созданных sys_file_references только заголовок и описание, чтобы увидеть, файл отсутствует.

Мой класс модели содержит это:

    /**
     * uid of a sys_file
     *
     * @var integer
     */
    protected $originalFileIdentifier;

    /**
     * setOriginalResource
     *
     * @param \TYPO3\CMS\Core\Resource\FileReference $originalResource
     * @return void
     */
    public function setOriginalResource(\TYPO3\CMS\Core\Resource\FileReference $originalResource) {
        $this->originalResource = $originalResource;
        $this->originalFileIdentifier = (int)$originalResource->getOriginalFile()->getUid();
    }


    /**
     * @return \TYPO3\CMS\Core\Resource\AbstractFile|\TYPO3\CMS\Core\Resource\FileReference|\TYPO3\CMS\Core\Resource\Folder|\TYPO3\CMS\Core\Resource\ResourceInterface
     * @throws \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException
     */
    public function getOriginalResource()
    {
        if ($this->originalResource === null) {
            $this->originalResource = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->getFileReferenceObject($this->getUid());
        }

        return $this->originalResource;
    }

    /**
     * setFile
     *
     * @param \TYPO3\CMS\Core\Resource\File $falFile
     * @return void
     */
    public function setFile(\TYPO3\CMS\Core\Resource\File $falFile) {
        $this->originalFileIdentifier = (int)$falFile->getUid();
    }

Код задачи:

            $contentElement = $contentRepository->findByUid(123);

            if( file_exists($pathToFile)) {
                /** @var File $file */
                $file = $resourceFactory->getFileObjectFromCombinedIdentifier('1:/'.$pathToFile);

                /** @var SysFileReference $newFileReference */
                $newFileReference = $objectManager->get('VENDOR\\MyExtension\\Domain\\Model\\SysFileReference');

                $newFileReference->setFile($file);
                $newFileReference->setTitle('The Title');
                $newFileReference->setDescription('Lorem Ipsum Dolor');

                $contentElement->addMedia($newFileReference);
                $contentRepository->update($contentElement);
                $persistanceManager->persistAll();
            }

В созданной sys_file_reference отсутствует файл: a busy cat

Файл $, который я пытаюсь прикрепить: a busy cat

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Эта функция удаляет (набор удален = 0) для sys_file_reference

    protected function deleteFileReference($uid)
    {
        $cmd['sys_file_reference'][$uid]['delete'] = 1;
        $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
        $dataHandler->start([], $cmd);
        $dataHandler->admin = true;
        $dataHandler->process_cmdmap();
    }
0 голосов
/ 14 февраля 2019

Очень сложно создавать ссылки на файлы с помощью Extbase.Ваш лучший способ - это прямое манипулирование базой данных:

protected function createFileReference($contentUid, $pid, $fieldName, File $file)
{
    $data = [
        'sys_file_reference' => [
            StringUtility::getUniqueId('NEW') => [
                'table_local' => 'sys_file',
                'uid_local' => $file->getProperty('uid'),
                'tablenames' => 'tt_content',
                'uid_foreign' => $contentUid,
                'fieldname' => $fieldName,
                'pid' => $pid,
            ]
        ]
    ];
    $dataHandler = GeneralUtility::makeInstance(DataHandler::class);
    $dataHandler->start($data, []);
    $dataHandler->admin = true;
    $dataHandler->process_datamap();
}

Приведенный выше пример относится к режиму Backend.Вы должны использовать DataHandler там, потому что это также обновит различные системные таблицы.

...