Правильное использование FAL в Extbase

Модель домена

class Image extends AbstractContent {

    /**
     * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
     */
    protected $file;

    /**
     * Gets the image file
     *
     * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference
     */
    public function getFile() {
        return $this->file;
    }

    /**
     * Sets the image file
     *
     * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $file
     * @return void
     */
    public function setFile($file) {
        $this->file = $file;
    }
}

Импорт фрагментов службы

/**
 * @var \TYPO3\CMS\Core\Resource\ResourceStorage
 */
protected $defaultStorage;

[...]

$this->defaultStorage = ResourceFactory::getInstance()->getDefaultStorage();

[...]

$file = $this->defaultStorage->addFile(
    '/tmp/4711', 
    $this->defaultStorage->getRootLevelFolder(), 
    'foo.jpg', 
    'overrideExistingFile'
);

$falReference = ResourceFactory::getInstance()->createFileReferenceObject(
    array(
        'uid_local' => $file->getUid(),
        'uid_foreign' => uniqid('NEW_'),
        'uid' => uniqid('NEW_'),
    )
);

$reference = GeneralUtility::makeInstance(FileReference::class);
$reference->setOriginalResource($falReference);

$content = GeneralUtility::makeInstance(Image::class);
$content->setFile($reference);

После сохранения $content образ доступен через запись и монтирование файла, но столбец Ref в BE > FILE > File List) равен -, а не >= 1. Так что похоже, что ссылка несколько сломана. Когда я использую BE для добавления изображения в запись, все в порядке. Я использую TYPO3 CMS 7.3-dev.

Что не так с моим кодом?


person witrin    schedule 23.05.2015    source источник


Ответы (2)


Я получаю подсказку в Slack-канале TYPO3.

Вам просто нужно установить plugin.tx_myext.persistence.updateReferenceIndex = 1 соответственно module.tx_myext.persistence.updateReferenceIndex = 1 и индекс будет обновлен.

В качестве альтернативы вы можете использовать \TYPO3\CMS\Core\Database\ReferenceIndex::updateRefIndexTable().

person witrin    schedule 23.05.2015

Когда мне пришлось использовать FAL в моем расширении, я нашел эту ссылку: http://t3-developer.com/extbase-fluid/extensions-erweitern/fal-in-eigenen-extensions/fal-in-typo3-extensions-verwenden/

Поскольку он на немецком языке, я очень кратко объясню, что там делается:

  1. расширьте свою модель данных в ext_tables.sql, добавьте столбец некоторого типа char (например, varchar)

  2. добавьте свой столбец в раздел столбца в массиве TCA в ext_tables.php

    'mypictures' => array( 'exclude' => 1, 'label' => 'My Pictures', 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array( ' внешний вид' => массив ('createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'), 'minitems' => 0, 'maxitems' => 99, ), $GLOBALS['TYPO3_CONF_VARS' ]['GFX']['imagefile_ext']), ),

  3. Расширьте свои файлы моделей. Обратите внимание на аннотации!

  4. Вы можете использовать свои медиафайлы в своем гибком шаблоне.

person denvercoder    schedule 26.05.2015
comment
Это не отвечает на вопрос. Я не спрашивал, как использовать FAL в Extbase. Я спросил о том, как правильно использовать его в отношении эталонного индекса. Пожалуйста, внимательно прочитайте вопрос. - person witrin; 27.05.2015
comment
Извини! Насколько я понимаю, вам нужно будет аннотировать поле в файле класса вашей модели. - person denvercoder; 27.05.2015
comment
Примерно так: @var\TYPO3\CMS\Extbase\Persistence\ObjectStorage‹\TYPO3\CMS\Extbase\Domain\Model\FileReference› - person denvercoder; 27.05.2015
comment
Нет, см. другой ответ. То, что вы упоминаете, - это соотношение 1: 1 и 1: n, но это не имеет ничего общего с рассматриваемой проблемой. ;) - person witrin; 27.05.2015
comment
Хорошо, кажется, я неправильно понял вопрос. Еще раз извините. - person denvercoder; 29.05.2015