В чем разница между render () и renderStatic () и тем, что следует использовать при написании ViewHelper в TYPO3 - PullRequest
0 голосов
/ 05 февраля 2019

Есть несколько примеров написания пользовательского ViewHelper и различных способов сделать что-либо.Я видел примеры с render () и renderStatic (например, в Разработка пользовательского ViewHelper ).

В 24 Fluid Tips есть объяснение, но я его не понимаю, и оно не проясняет мне, почему существуют 2 функции и что следует использовать где.

Разрывные изменения ( Представления аргументов метода в ViewHelpers устарели ) и фрагментированная информация в разных местах затрудняют получение четкого ответа здесь.Является ли пример в Разработка пользовательского ViewHelper актуальной и лучшей практики?

1 Ответ

0 голосов
/ 06 февраля 2019

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(), если можете (производительность).
  • Используйте render(), если реализуете TagBased-ViewHelper (подкласс * 1037)* TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper).
  • Используйте render(), если вам нужно прочитать дочерние узлы.
  • Просмотрите ViewHelpers, которые поставляются с Fluid (например, TYPO3 v9 LTS) в качестве примеров.
    (см .: typo3/sysext/fluid/Classes/ViewHelpers/*) [ GitHub ]
...