在流体模板中解析现有的JSON字符串?

Urs*_*Urs 0 typo3 fluid extbase typo3-6.2.x

我有一个JSON字符串,其中包含我想在模板中呈现的一些数据.由于Fluid数组也以JSON标注,我想我可能只需要接受JSON字符串并将其交给流体,告诉它像处理其他数组一样处理它并在模板中使用它.

因此获得了大量的速度并且失去了开销(不必将JSON数据拆分以将其保存在DB中,可以轻松地将其模板化为流畅的).

它不起作用,至少不是我如何尝试它.

<f:alias map="{item.jsonData}">
  {fieldname}
</f:alias>
Run Code Online (Sandbox Code Playgroud)

它 - 当然 - 抱怨它收到了一个字符串,而不是一个数组.

json_decode在将数组返回流体之前,是否必须构建一个viewhelper ?还是有更原生的方式?

这是基本的控制器动作:

/**
 * action show
 *
 * @param \NAMESPACE\Myext\Domain\Model\Item $item
 * @return void
 */
public function showAction(\NAMESPACE\Myext\Domain\Model\Item $item) {
    $this->view->assign('item', $item);
}
Run Code Online (Sandbox Code Playgroud)

lor*_*enz 5

作为使用自定义ViewHelper的替代方法,您可以在模型中使用瞬态属性.假设您的模型具有属性"jsonData",该属性是JSON编码的字符串.

现在,为它添加另一个属性$ jsonArray和一个getter:

/**
 * @var array
 * @transient
 */
protected $jsonArray;
Run Code Online (Sandbox Code Playgroud)

在getter中,您解码数据:

/**
 * @return array
 */
public function getJsonArray() {
  return json_decode($this->jsonData);
}
Run Code Online (Sandbox Code Playgroud)

瞬态属性就像虚拟属性.您不需要DB字段和TCA定义,也不能基于它进行查询,但您可以在对象中获得数据:

<f:for each="{item.jsonArray}" as="value">
 {value}
</f:for>
Run Code Online (Sandbox Code Playgroud)