【问题标题】:TYPO3 returns "Array" to Fluid as StringTYPO3 将“Array”作为字符串返回给 Fluid
【发布时间】:2016-05-06 16:00:50
【问题描述】:

我尝试将 Viewhelper 中的数组传递给 Fluidtemplate。 它总是显示字符串“Array”。如果我尝试将它用作f:for each viewhelper 中的参数,则会出现异常,因为它是字符串而不是数组。 我之前用的是 Typo3 6.2,现在我用的是 Typo3 7,它停止工作了。

public function render($uids) { // $uids='901,902,903'
    $uidArray = explode(',', $uids);

    $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
    $repository = $objectManager->get('XXX\\X\\Domain\\Repository\\FooRepository');
    $query = $repository->createQuery();
    $query->getQuerySettings()->setRespectStoragePage(FALSE);
    $query->matching(
        $query->in('uid', $uidArray)
    );
    return $query->execute()->toArray();
}

这是我的流体模板:

{namespace vh=My/Namespace/ViewHelpers}
<f:for each="{vh:GetArray(uids: '901,902,903')}">...</f:for>

【问题讨论】:

  • 如果将 viewhelper 传递给 debug viewhelper 会得到什么?
  • 类似的东西:'Array' String(5)
  • 这意味着您的数组在被viewhelper返回之前已经被转换为字符串。
  • 完全正确,我不明白为什么 - 那是我的问题

标签: arrays typo3 fluid viewhelper typo3-7.x


【解决方案1】:

你不能用你的 viewhelper 返回一个数组,因为 viewhelper 总是返回字符串。

但是,您可以在当前渲染上下文中引入一个新变量,然后在您的 viewhelper 中使用这个变量。

public function render() {
  $returnArray = array('a' => 17, 'b' => 42);
  $this->templateVariableContainer->add('returnArray', $returnArray);
  $output = $this->renderChildren();
  $this->templateVariableContainer->remove('returnArray');
  return $output;
}

在您的模板中,您可以在 {returnArray} 上运行 for 循环。

【讨论】:

  • 这行得通,谢谢!只是不明白他们为什么以这种方式改变它。可以将数组直接返回给流体
【解决方案2】:

尝试在 Fluid 模板中组合使用 f:forf:cycle。请参阅 Fluid ViewHelper 参考中的 f:cycle examples

【讨论】:

  • 这行不通,因为我不能使用需要一个数组作为参数的 viewhelper。我的 viewhelper 的返回值是一个字符串而不是一个数组。
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
相关资源
最近更新 更多