我如何在 TYPO3 中获取文件引用对象的 uid?

How do I get uid of a File Reference Object in TYPO3?

我试图通过此代码获取文件 $f = $resourceFactory->getFileObject($uid); 但问题是 uid 是文件引用对象中的受保护字段,如下所示,所以我无法获取uidgetUid() 显然也不起作用。

那么我怎样才能得到文件引用的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;
}
}

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

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

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

找我工作。

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

您还可以获得 sys_file table uid for getFileObject.like,

$sys_file_uid = $fileReference[0]['uid_local'];