Отображение ссылки на файл Extbase с помощью Fluid

В расширении extbase у меня есть объект FileReference. Первоначально он был создан с помощью extension_builder. Из модели:

/**
 * apprenticeshipDocument
 *
 @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 */
protected $apprenticeshipDocument = NULL;

и т.п.

В интерфейсе <f:debug>{institution.apprenticeshipDocument}</f:debug> дает мне следующее:

Extbase Var Dump

Первое: originalResource отсутствует.

Во-вторых: при прямом вызове {agency.apprenticeshipDocument.uidLocal} значение равно NULL! Хотя говорят, что на 450 выше.

Третье: допустим, мы можем получить uidLocal, который соответствует uid в sys_file.

Решение для googlable:

<f:link.page pageUid="{f:uri.image(src:450)}" target="_blank">Text</f:link.page>

указывает не на сам файл PDF, а на визуализированный файл PDF в формате GIF. Все, что я хочу сделать, это вывести путь к файлу (sys_file.identifier) в виде ссылки ... должен же быть способ, не так ли?

РЕДАКТИРОВАТЬ: Решение, предоставленное Йостом:

<f:if condition="{institution.apprenticeshipDocument}">
    <li>
    <f:link.page pageUid="{institution.apprenticeshipDocument.originalResource.publicUrl}" target="_blank">Text</f:link.page>
    </li>
</f:if>

person Urs    schedule 01.05.2015    source источник
comment
Может быть, связано с forge.typo3.org/issues/48965? Но я на 6.2.12, где патч вроде включен   -  person Urs    schedule 01.05.2015
comment
Ах, только что нашел forum.typo3.org/index.php/t/198281 рассмотрим это   -  person Urs    schedule 01.05.2015
comment
Это тот самый !! Отправлю ответ позже (надеюсь ...)   -  person Urs    schedule 01.05.2015
comment
originalResource загружается лениво, поэтому правильно быть NULL. Просто получите к нему доступ. Я считаю, что вы также можете получить к нему доступ, а затем выполнить f: debug, чтобы увидеть все его поля. Одним из них будет originalFile, который также загружается лениво.   -  person Jost    schedule 01.05.2015
comment
Причина недоступности uidLocal, вероятно, заключается в том, что для него нет геттера, поэтому жидкость не может его прочитать. Чтобы связать файл, я обычно использую v:link.typolink ViewHelper из EXT: vhs, который можно использовать следующим образом: <v:link.typolink configuration="{parameter: 'file:{variableContainingUid}'}>Linktext</v:link.typoscript>. В качестве альтернативы вы можете использовать {institution.apprenticeshipDocument.originalResource.publicUrl} для получения URL (не уверены в точном имени).   -  person Jost    schedule 01.05.2015
comment
Про ленивую загрузку: классно, спасибо!   -  person Urs    schedule 02.05.2015
comment
О vhs: Ах, конечно, здорово. VHS спешит на помощь. Но иногда я стараюсь избегать зависимостей для лучшей ремонтопригодности. Теперь у меня <f:link.page pageUid="fileadmin/{institution.apprenticeshipDocument.originalResource.originalFile.identifier}" target="_blank"><f:translate key="tx_stellen_domain_model_institution.apprenticeship_document" /></f:link.page>, и это нормально, так как на этом сайте только одно файловое хранилище. Я пытался получить полный путь с помощью <f:debug>{institution.apprenticeshipDocument.originalResource.originalFile.storage}</f:debug>-, но снова не повезло   -  person Urs    schedule 02.05.2015
comment
Я думаю, что это хуже для удобства обслуживания, чем использование EXT:vhs - вы зависите от информации о том, что в папке fileadmin находится хранилище, и это единственное хранилище, в котором находится ваш файл. Вы также предполагаете, что идентификатор файла имеет какое-то отношение к URL-адрес файла, наличие которого не гарантируется.   -  person Jost    schedule 02.05.2015
comment
Попробуйте вместо этого использовать publicUrl-свойство файла (или ссылки) - есть для него в fileInterface, поэтому и файл, и ссылка на файл имеют это свойство. Кроме того, доступно больше свойств, которые вы не видите в выводе отладки, в основном метаданные - доступ к ним осуществляется с помощью магического получателя.   -  person Jost    schedule 02.05.2015
comment
Огромное спасибо! Можете ли вы опубликовать решение (см. Выше) в качестве ответа, чтобы я мог его принять?   -  person Urs    schedule 02.05.2015


Ответы (1)


Файлы и ссылки на файлы в жидкости ведут себя немного иначе, чем обычно:

  1. Они загружаются лениво, поэтому значения originalResource (ссылка на файл Extbase) и originalFile (ссылка на файл ядра) равны NULL перед первым доступом к ним. Но вы можете получить к ним доступ как обычно.
  2. Невозможно получить доступ к значению uidLocal ссылки на файл extbase, потому что для него нет геттера (начиная с TYPO3 6.2.12 и 7.2).
  3. Чтобы получить URL-адрес файла, используйте его атрибут publicUrl или используйте ViewHelper v:link.typolink из EXT: vhs, например:

    <v:link.typolink configuration="{parameter: 'file:{uid}'}>
        Linktext
    </v:link.typolink>
    

    uid - это идентификатор файла в данном случае.

  4. Многие свойства файлов (особенно свойства метаданных) не сохраняются как обычные атрибуты объекта, а сохраняются внутри в ассоциативный массив, а затем извлекаются с помощью магического получателя. Они также загружены лениво. Таким образом, они обычно не отображаются как отдельные свойства в дампах переменных и могут не быть установлены вообще или NULL (как и выше).
person Jost    schedule 03.05.2015