2017-01-19 9 views
0

У меня есть расширения интерфейса, в которых пользователи должны добавлять/редактировать записи sys_file.TYPO3 Extbase FAL - Как обновить метаданные файлов (sys_file) от внешнего контроллера

Я пытаюсь обновить метаданные файла, как это (упрощенный):

$uid = (int)$this->request->getArgument('file'); 
$resourceFactory = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance(); 
$file = $resourceFactory->getFileObject($uid); 

$file->updateProperties(array(
    'title'    => $this->request->getArgument('title'), 
    'keywords'   => $this->request->getArgument('keywords'), 
    'description'  => $this->request->getArgument('description'), 
    'copyright'   => $this->request->getArgument('copyright'), 
    'modification_date' => time() 
)); 

$this->fileRepository->update($file); 
$this->addFlashMessage(LocalizationUtility::translate('messages.success.file')); 
$this->persistenceManager->persistAll(); 

PersistenceManager и FileRepository впрыскивают через:

/** 
* fileRepository 
* 
* @var \TYPO3\CMS\Core\Resource\FileRepository 
* @inject 
*/ 
protected $fileRepository = NULL; 

/** 
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager 
* @inject 
*/ 
protected $persistenceManager; 

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

Любой способ отладки/решения этого вопроса? Кажется, что файл $ fileRepository фактически не выполняет инструкцию «update», есть ли какая-то проверка разрешения, которую мне нужно обойти в интерфейсе?

ответ

0

Насколько я знаю, вы должны обновить их самостоятельно с помощью запроса на обновление:

$GLOBALS['TYPO3_DB']->->exec_UPDATEquery('sys_file_metadata', 'file = ' . $fileUid, array('modification_date' => time())); 
+0

Эй Рене, спасибо за ваши вход. Я действительно сделал это так и надеялся использовать это только как временный хак. Я видел упоминание о FileIndexRepository, но не кажется, что этот объект может взять объект File Resource для обновления своих метаданных? – Garvin

4

Вид старой теме, но есть решение Wich работает в 7.6 и 8.x, как Repository в 7.6 использует $ GLOBAL ['TYPO3_DB'], а в 8.x он уже перенесен в Doctrine, поэтому нет необходимости переписывать код. Возможно, это сэкономит время.

Используйте репозиторий TYPO3 \ CMS \ Core \ Resource \ Index \ MetaDataRepository и просто загрузите его через objectManager.

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager'); 
    $metadata = $objectManager->get('TYPO3\CMS\Core\Resource\Index\MetaDataRepository'); 

, то вы можете заполнить метаданные, как этого

$metadata->update($fileUid, $metadataInput); 

Метод обновления требует два Params, файл UID и массив с именами дб поля и значением