2017-01-19 5 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は実際には "更新"ステートメントを実行していないようですが、フロントエンドで回避する必要のある許可チェックがありますか?

答えて

0

限り、私はあなたが更新クエリを自分でそれらを更新する必要があります知っているとおり、古いスレッドの

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

値、あなたに感謝この

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

のようなメタデータを取り込むことができます入力。私は実際にそのようにして、それを一時的なハックとしてしか使用しないことを望んでいました。私はFileIndexRepositoryの言及を見ましたが、このメタデータを更新するためにFile Resourceオブジェクトを取ることはできません。 – Garvin

4

種類が、ウィッヒは7.6および8.xに機能するソリューションをリポジトリとして、そこにあります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'); 

、あなたは更新方法は、2つのパラメータ、ファイルのuidとDBのフィールド名を持つ配列を必要としねえルネを

関連する問題