类型3 Extbase JsonView FAL
这是我的控制器操作:类型3 Extbase JsonView FAL,json,controller,typo3,extbase,Json,Controller,Typo3,Extbase,这是我的控制器操作: public function jsonAction() { $this->view->setVariablesToRender(array('produkte')); $this->view->setConfiguration( array( 'produkte' => array( '_descendAll' => array(
public function jsonAction()
{
$this->view->setVariablesToRender(array('produkte'));
$this->view->setConfiguration(
array(
'produkte' => array(
'_descendAll' => array(
'only' => array('titel', 'beschreibung', 'bild', 'download', 'categories'),
'_descend' => array(
'bild' => array(),
'download' => array(),
'categories' => array(),
)
)
)
)
);
$this->view->assign('produkte', $this->produktRepository->findAll());
}
我得到了一个非常好的JSON字符串。不幸的是,我只得到包含文件(FAL)的PID和UID。如何获取完整对象或至少包含文件的路径
/**
* Returns the bild
*
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $bild
*/
public function getBild()
{
return $this->bild;
}
/**
* Returns the download
*
* @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $download
*/
public function getDownload()
{
return $this->download;
}
尝试下降到
FileReference
的originalResource
并公开publicUrl
:
$this->view->setConfiguration(
array(
'produkte' => array(
'_descendAll' => array(
'only' => array('titel', 'beschreibung', 'bild', 'download', 'categories'),
'_descend' => array(
'download' => array(
'_descendAll' => array(
'_only' => array('originalResource');
'_descend' => array(
'originalResource' => array(
'_only' => array('publicUrl');
);
);
);
),
)
)
)
)
);
originalResource
部分是一个计算属性,在调用getter方法时,将自动检索实体-这就是它在Extbase的FileReference
模型中的实现方式
/**
* @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;
}
但是,请确保正确编写JSON视图配置。所有与控件相关的属性都是带有下划线的前缀\uu
——在上面的代码示例中,它应该是\u only
,而不是only
。有效的控件名称包括\u only
,\u exclude
,\u descendAll
,\u exposeObjectIdentifier
,\u exposeObjectIdentifierKey
,\u exposeClassName
请在中查找更多详细信息,该信息对于TYPO3 CMS中的JsonView
仍然有效。请尝试使用\TYPO3\CMS\Extbase\Persistence\ObjectStorage,而不是\TYPO3\CMS\Extbase\Domain\Model\FileReference在模型中为您的FAL属性设置。
我不需要一个以上的文件,但在我更改此文件后,我会获得publicUrl。您可以共享Produkt的相关模型部分吗?好的,请编辑上面的内容。希望这是正确的部分。我怀疑这与以下事实有关:文件和文件引用对象的属性不是真正的对象属性,而是作为延迟加载的关联数组存储的(我认为名为
属性)。JsonView
只处理通过调用get\u object\u vars
(通过调用to)可以获取的对象,它使用get\u object\u vars
。尝试输出属性属性,这可能有帮助吗?不确定这是否正确。谢谢,我试试看。但不幸的是没有效果。只有PID和UID。请在Produkt
上执行DebuggerUtility:var_dump
(可能出于此目的禁用JsonView),例如调试第一项($this->produktRepository->findAll()->getFirst()
),并查看属性原始资源是否在那里工作