Как мне получить uid объекта ссылки на файл в TYPO3?

Я пытаюсь получить файл с помощью этого кода $f = $resourceFactory->getFileObject($uid);, но проблема в том, что uid является защищенным полем в объекте ссылки на файл, как показано ниже, поэтому я не могу получить uid, и getUid(), очевидно, тоже не будет работать.

Итак, как я могу получить uid ссылки на файл (FAL)

/**
* A file reference object (File Abstraction Layer)
*
* @api experimental! This class is experimental and subject to change!
*/
class FileReference extends 
\TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder
{
  /**
  * Uid of the referenced sys_file. Needed for extbase to serialize the
  * reference correctly.
  *
  * @var int
  */
protected $uidLocal;

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

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

    return $this->originalResource;
}
}

person Huzaifa Mustafa    schedule 09.07.2018    source источник


Ответы (2)


Если у вас есть экземпляр TYPO3\CMS\Extbase\Domain\Model\FileReference, вы можете использовать getOriginalResource() для получения обернутого TYPO3\CMS\Core\Resource\FileReference. Если вам нужен указанный файл, вы можете использовать getOriginalFile(). Таким образом, как цепной вызов:

$file = $fileReference->getOriginalResource()->getOriginalFile();

Обратите внимание, что вам не нужно использовать ResourceFactory самостоятельно во всем этом, об этом позаботятся внутренне.

person Mathias Brodala    schedule 09.07.2018

Работай со мной.

Вы можете найти или получить uid ссылки на файл, используя пользовательский запрос.

В контроллере:

$uid = $yourObject->getUid();
$fileReference = $this->yourRepository->getFileReferenceObject($uid);

В репозитории

public function getFileRefernceHeaderLogo($uid){
        $query = $this->createQuery();
        $queryString = "SELECT *
                            FROM sys_file_reference
                                WHERE deleted = 0 
                                        AND hidden = 0 
                                            AND tablenames='your_table_name'
                                                AND fieldname='your_field_name'
                                                    AND uid_foreign =".$uid;

        $query->statement($queryString);
        return $res = $query->execute(true);            
    }

В контроллере

$fileRefUid = $fileReference[0]['uid'];

Здесь вы можете получить uid таблицы ссылок на файлы. Это долгий процесс.

Вы также можете получить uid таблицы sys_file для getFileObject.like,

$sys_file_uid = $fileReference[0]['uid_local'];
person Dipak Parmar    schedule 25.07.2018