Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型3 Extbase JsonView FAL_Json_Controller_Typo3_Extbase - Fatal编程技术网

类型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()
),并查看属性
原始资源是否在那里工作