为了账号安全,请及时绑定邮箱和手机立即绑定

你如何访问 TYPO3Fluid AbstractViewHelper 中的 THEN 和 ELSE

你如何访问 TYPO3Fluid AbstractViewHelper 中的 THEN 和 ELSE

PHP
温温酱 2023-04-21 15:45:52
TYPO3 (TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper) 中有一个新的 AbstractViewHelper,我尝试用它为我的项目实现一个非常简单的 InArrayViewHelper。问题是,如果您想根据https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-render()访问then或子标签,您应该使用custom-viewhelper.html#renderstatic-methodelse所以我做了类似的事情<?phpnamespace Vendor\Project\ViewHelpers;use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;class InArrayViewHelper extends AbstractViewHelper {    //use CompileWithRenderStatic;    public function initializeArguments() {        $this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);        $this->registerArgument('needle', 'string', 'View helper needle', TRUE);    }    public function render() {          $needle = $this->arguments['needle'];        $haystack = $this->arguments['haystack'];        if(!is_array($haystack)) {             return $this->renderElseChild();        }        if(in_array($needle, $haystack)) {            return $this->renderThenChild();        } else {            return $this->renderElseChild();        }      }}好吧,但他们搬走了renderThenChild并renderElseChild在那里。这样做的正确方法是什么。我可以不用 \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper 吗?
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

首先:如果你想让你的 ViewHelper 成为一个条件 ViewHelper 你应该子类化TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper,而不是TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper。前者包含辅助方法的集合,例如renderThenChild(呈现节点f:then或返回then参数,以存在者为准)。

第二:访问标签(与呈现标签或编译执行的闭包相反)只能在模板尚未编译时发生,并且可以通过覆盖public static function postParseEventwhich receives whichViewHelperNode允许您读取子节点来实现通过.withgetChildNodes和/或添加额外的子节点addChildNode

基于TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper和使用手动注册thenelse参数的实现也可以工作,但不支持子节点,例如f:then不复制几乎所有来自TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper.

所以答案是:是的,你可以不用AbstractConditionViewHelper- 但你不应该这样做。


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信