视图助手中缺少子节点

时间:2017-08-15 11:20:31

标签: typo3 fluid

我创建了一个视图助手,它曾用于TYPO3 7.6,但已停止在TYPO3 8.7上工作。即使调试时evaluateCondition的返回值正确,它也会始终呈现else部分。

调试时,我看到AbstractConditionViewHelper中的AbstractConditionViewHelper被调用,并且renderThenChildrenderElseChild被调用。但是那里缺少子节点。

我的助手:

<?php

namespace Vendor\Extkey\ViewHelpers;

class IfRegExpViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
{

    /**
     * Initialize arguments
     * @throws \TYPO3\CMS\Fluid\Core\ViewHelper\Exception
     */
    public function initializeArguments() {
        $this->registerArgument('then', 'mixed', 'Value to be returned if the condition if met.', false);
        $this->registerArgument('else', 'mixed', 'Value to be returned if the condition if not met.', false);
        $this->registerArgument('value', 'string', 'The value', TRUE);
        $this->registerArgument('pattern', 'string', 'The regex pattern to check', TRUE);
    }

    /**
     * Check if pattern matches
     *
     * @param array $arguments ViewHelper arguments to evaluate the condition for this ViewHelper, allows for flexiblity in overriding this method.
     * @return string the rendered string
     * @api
     */
    protected static function evaluateCondition($arguments = NULL)
    {
        if (preg_match($arguments['pattern'], $arguments['value']) === 1) {
            return true;
        } else {
            return false;
        }
    }
}

模板中的用法:

<f:if condition="{eddaylight:IfRegExp(value: overview, pattern: '/[a-zA-Z0-9]+/')}">
    <f:then>
        {overview}
    </f:then>
    <f:else>
        something else
    </f:else>
</f:if>

我需要做些什么来解析子节点吗?

1 个答案:

答案 0 :(得分:3)

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='name', password='pass')

错误 - 您编写的ViewHelper是一个条件ViewHelper本身,因此它返回class UserProfileManager { static var userProfile: UserProfileData? private static var sharedManager: UserProfileManager = { let shared = UserProfileManager() return shared }() class func shared() -> UserProfileManager { return sharedManager } } <f:if condition="{eddaylight:IfRegExp(value: overview, pattern: '/[a- zA-Z0-9]+/')}"> <f:then> {overview} </f:then> <f:else> something else </f:else> </f:if> 节点/ closure /参数的值,如果没有指定,则不返回任何内容。你上面写的内容与:

相同
then

这显然是错误的。

使用ViewHelper的方法是:

else

同样适用于<f:if condition=""> 的每个其他子类。

关于子节点的注意事项:

  • 在您当前的用例中,由于您在不传递子值的情况下以内联表示法编写ViewHelper,因此没有子节点。
  • 如果扩展到正确的语法,您将看到子节点,但只有在编译模板之前,此时才会设置子节点