1

我正在尝试通过此代码获取文件,$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;
}
}
4

2 回答 2

2

鉴于您有TYPO3\CMS\Extbase\Domain\Model\FileReferencethen 的实例,您可以使用它getOriginalResource()来获取包装好的TYPO3\CMS\Core\Resource\FileReference. 如果您需要引用的文件,则可以使用getOriginalFile(). 因此作为一个链式调用:

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

请注意,您不必ResourceFactory在所有这些中使用自己,这是在内部处理的。

于 2018-07-09T12:31:26.083 回答
0

从我那里工作。

您可以使用自定义查询查找或获取文件引用 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。这是一个漫长的过程。

您还可以获取 getFileObject.like 的 sys_file 表 uid,

$sys_file_uid = $fileReference[0]['uid_local'];
于 2018-07-25T14:21:08.527 回答