shel/fusion-match

该软件包已被废弃且不再维护。作者建议使用 neos/fusion 软件包。

Neos Fusion 中的匹配助手,用于简化字符串匹配

安装: 933

依赖项: 0

建议者: 0

安全: 0

星标: 6

关注者: 2

分支: 0

公开问题: 0

类型:neos-plugin

0.1.0 2020-11-30 15:05 UTC

This package is auto-updated.

Last update: 2022-11-09 11:00:23 UTC


README

Latest Stable Version Total Downloads License

此软件包提供 Fusion 对象以简化常见字符串匹配。

灵感来自 PHP 8 匹配表达式

此插件的目标是为 Neos CMS >= 4.3 提供给定功能⚠️ 因此,此软件包提供的功能已包含在 Neos 7.3 中。因此,此软件包将不再开发。

安装

在您的站点软件包中运行以下命令

composer require --no-update shel/fusion-match

然后在您的项目根目录中运行 composer update。

示例

基础

以下 Fusion 代码非常冗长且重复

rowClass = Neos.Fusion:Case {
    case1 {
      condition = ${q(node).property('columns') == "one"}
      renderer = "d-flex col-12 col-md-6 col-lg-12"
    }
    case2 {
      condition = ${q(node).property('columns') == "two"}
      renderer = "d-flex col-12 col-md-6 col-lg-6"
    }
    case3 {
      condition = ${q(node).property('columns') == "three"}
      renderer = "d-flex col-12 col-md-6 col-lg-4"
    }
    case4 {
      condition = ${q(node).property('columns') == "four"}
      renderer = "d-flex col-12 col-md-6 col-lg-3"
    }
}

使用 Match 对象后,它变得更加紧凑和易于阅读

rowClass = Shel.Fusion:Match {
    @subject = ${q(node).property('columns')}
    one = 'd-flex col-12 col-md-6 col-lg-12'
    two = 'd-flex col-12 col-md-6 col-lg-6'
    three = 'd-flex col-12 col-md-6 col-lg-4'
    four = 'd-flex col-12 col-md-6 col-lg-3'
}

提供默认值

您还可以通过 @default 提供默认值

rowClass = Shel.Fusion:Match {
    @subject = ${q(node).property('layout')}
    @default = ''
    left = 'my-module--left'
    right = 'my-module--right'
}

具有相同值的匹配

有时您有一个 Fusion 情况,它将匹配到具有相同返回值的多个字符串。您可以更明确地解决这个问题

myVar = Shel.Fusion:Match {
    @subject = ${q(node).property('layout')}
    left = 'my-module--left'
    right = 'my-module--right' 
    top = ${this.left} 
    bottom = ${this.left} 
}

其他返回类型

myVar = Shel.Fusion:Match {
    @subject = ${q(node).property('someProperty')}
    @default = ''
    case1 = afx`
        <div>hello world</div>     
    `
    case2 = 2
    case3 = Neos.Fusion:Value {
        value = 'hello world'
    }           
    case4 = Neos.Fusion:DataStructure {
        my = 'array'
    } 
}

确保所有情况都返回相同的类型,否则您会遇到麻烦 😉

AFX 中的使用

myVar = 'test' 
renderer = afx`
    <div>
        <Shel.Fusion:Match @subject={props.myVar}>
            <span @path="test">Hello world</span>
            <span @path="@default">No match found</span>
        </Shel.Fusion:Match>
    </div>
`    

类型检查和错误处理

该对象期望找到匹配项。提供的任何一种情况或默认值。如果没有匹配任何情况且未提供默认值,将抛出异常。

subject 将被转换为字符串。如果提供的 subject 无法转换为字符串,也会导致错误。

可匹配的情况也将被转换为字符串。因此,您可以使用字符串或数字。