有几个示例可以编写自定义ViewHelper和不同的处理方式。我已经看到了render()和renderStatic的示例(例如Developing a Custom ViewHelper)。

24 Fluid Tips中有一个解释,但我不明白,也无法为我弄清楚为什么有2个函数以及在哪里使用什么函数。

各地的变化(Render method arguments on ViewHelpers deprecated)和零碎的信息使得在这里很难获得清晰的答案。 Developing a Custom ViewHelper中的示例是否是最新的和最佳实践?

最佳答案

renderStatic()
首先,renderStatic()静态 PHP方法。这意味着,您无权访问实例属性,例如$this->tag,例如,当ViewHelper类是AbstractTagBasedViewHelper的子类时,这是必需的。
renderStatic()的另一个缺点是您无法访问子节点。在以下示例中,子节点例如是<f:then>:

<f:if condition="{variable}">
<f:then>
...
</f:then>
</f:if>

话虽如此,renderStatic()具有最佳性能,因为它是从已编译的Fluid中调用的。因此,如果可能,应使用此方法。

render()
在某些情况下,此方法是更好的选择,或者必须用于特定的用例(请参见上面的说明)。未编译render()方法中实现的逻辑,这会影响缓存的输出。
render()的缺点是它的性能。

摘要/其他说明
  • 如果可以,请使用renderStatic()(性能)。
  • 如果实现TagBased-ViewHelper(render())。
  • 如果需要读取子节点,请使用TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper
  • 请以Fluid(例如TYPO3 v9 LTS)附带的ViewHelper为例进行查看。
    (请参阅:render())[GitHub]
  • 关于typo3 - render()和renderStatic()有什么区别?在TYPO3中编写ViewHelper时应该使用什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54531152/

    10-11 20:59