在Fluid中如何检查变量是否为数组类型

3
在fluid模板中,是否有办法判断一个变量的类型是否为数组?我需要类似于这样的一个功能。
<f:if condition='{myvar.Type == "Array"}'></f:if>

我需要为此创建自己的ViewHelper吗?

什么是用例?这样的逻辑不应该出现在模板中。 - pgampe
1
在将变量传递给我的部分之前,我需要检查它是否为数组类型。 - Black
2个回答

6

您需要创建自己的ViewHelper,或者使用EXT:vhs中现有的ViewHelper

它的工作方式类似于f:if ViewHelper:

<v:condition.type.isArray value="{myvar}">
    <f:then>
        ...
    </f:then>
    <f:else>
        ...
    </f:else>
</v:condition.type.isArray>

然后我认为我必须编写自己的视图助手,如果我尝试安装扩展程序“VHS:Fluid Viewhelpers”,就会出现“您的PHP版本高于允许的”错误提示。 - Black
您正在使用哪个版本的TYPO3? - Jost
1
你使用的 TYPO3 版本是哪个?如果是 6.2.x,你不应该使用 PHP 7(它只与 PHP 5.3.7 至 5.6 兼容),如果是 7.6.x,VHS 应该在版本 3.0.0 中可用,支持 PHP 7.0.x。 - Jost
抱歉,SO出了一些故障,导致评论重复了。 - Jost
我正在使用Typo3 7.6.9,谢谢,我会搜索v3! - Black
如果我想使用<f:then>和/或<f:else>,我需要像这样内联调用它:<f:if condition="{v:condition.type.isArray(value: myvar, then: 1)}"> - phse

3

我通过编写自己的ViewHelper解决了这个问题。

class TestViewHelper extends AbstractViewHelper 
{
    /**
    * Arguments Initialization
    */
    public function initializeArguments()
    {
        $this->registerArgument('myvar', 'string', 'test', TRUE);
    }

    /**
    * @return integer test
    */
    public function render() 
    {

        $arg      = $this->arguments['myvar'];
        $argType  = gettype($arg);
​
        if (preg_match("/array/i", "$argType")) {
            return 1;    //match
        } else {
            return 0;    //No match
        }
    }
}

用法:

{namespace mynamespace=YOUR_EXTENSION_NAME\YOUR_VENDOR_NAME\ViewHelpers}

<f:if condition="<mynamespace:isarray myvar='{_all}'/>==1">
    <f:then>
        <strong>_all is an Array</strong><br>
    </f:then>
    <f:else>
        <strong>_all is not an Array</strong><br>
    </f:else>
</f:if>

2
你可以使用 return is_array($this->arguments['myvar']);,这里不需要进行正则表达式操作。 - Jost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接