0

0

告别繁琐Fusion代码:如何使用neos/fusion-afx打造优雅组件

碧海醫心

碧海醫心

发布时间:2025-11-26 17:49:20

|

464人浏览过

|

来源于php中文网

原创

告别繁琐fusion代码:如何使用neos/fusion-afx打造优雅组件

作为Neos CMS的开发者,我曾经也为Fusion代码的冗长和复杂性所困扰。每次构建一个稍微复杂一点的组件,都需要嵌套大量的Neos.Fusion:TagNeos.Fusion:Join,使得代码变得非常难以阅读和维护。尤其是在处理多层HTML结构时,那种层层嵌套的感觉,让我感觉不像在编写视图组件,更像是在堆砌配置项。这不仅拖慢了开发进度,也让团队协作变得更加困难。

Composer在线学习地址:学习地址

幸运的是,Composer生态为我们带来了解决方案。今天,我想向大家介绍一个强大的Composer包——neos/fusion-afx,它彻底改变了我编写Neos Fusion组件的方式,让Fusion代码变得前所未有的简洁和优雅。

neos/fusion-afx 是什么?

neos/fusion-afx 提供了一种受JSX启发的紧凑语法,让我们可以直接在Fusion文件中以类似XML的方式定义组件结构。你可以把它想象成是Fusion世界的JSX——它是一个Fusion预处理器,能将这种简洁的AFX语法在解析时转换为纯粹的Fusion代码,并进行缓存,从而在运行时保持高效。

它的核心优势在于:

  1. 无需独立模板文件:所有视图逻辑直接在Fusion文件中完成,减少文件切换。
  2. 增强可读性:以更直观的标签形式展现组件结构,一目了然。
  3. 强大的可扩展性:由于最终生成的是纯Fusion代码,你仍然可以利用Fusion的强大机制(如@override)对其进行扩展和重写。

如何安装?

使用Composer安装neos/fusion-afx非常简单。只需在你的Neos项目根目录运行以下命令:

composer require neos/fusion-afx

告别冗长,拥抱简洁

让我们通过一个实际例子来看看neos/fusion-afx如何化繁为简。

传统Fusion代码(示例):

prototype(Vendor.Site:Example) < prototype(Neos.Fusion:Component) {
    title = 'title text'
    subtitle = 'subtitle line'
    imageUri = 'https://dummyimage.com/600x400/000/fff'

    renderer = Neos.Fusion:Tag {
        tagName = 'div'
        content = Neos.Fusion:Join {
            headline = Neos.Fusion:Tag {
                tagName = 'h1'
                content = ${props.title}
                attributes.class = 'headline'
            }
            subheadline = Neos.Fusion:Tag {
                tagName = 'h2'
                content = ${props.subtitle}
                attributes.class = 'subheadline'
                @if.hasSubtitle = ${props.subtitle ? true : false}
            }
            image = Vendor.Site:Image {
                uri = ${props.imageUri}
            }
        }
    }
}

这段代码虽然功能完整,但其冗长的结构和大量的Neos.Fusion:TagNeos.Fusion:Join让人难以快速理解组件的HTML结构。

使用neos/fusion-afx重构后:

prototype(Vendor.Site:Example) < prototype(Neos.Fusion:Component) {
    title = 'title text'
    subtitle = 'subtitle line'
    imageUri = 'https://dummyimage.com/600x400/000/fff'

    renderer = afx`
       

{props.title}

{props.subtitle}

` }

是不是瞬间感觉清爽了许多?通过afx反引号包裹的代码块,我们用类似HTML/JSX的语法直接定义了组件的渲染结构。neos/fusion-afx会在后台将其解析并转换为与传统Fusion代码等价的结构。

AFX 的核心语法规则

AFX语法非常直观,但也有一些值得注意的规则:

皮卡智能
皮卡智能

AI驱动高效视觉设计平台

下载
  • HTML标签
    Hello
    会被转换为 Neos.Fusion:Tag 对象。所有属性都会作为标签属性渲染。
  • Fusion对象标签 会被解释为对 Vendor.Site:MyComponent 原型的引用,所有属性都将作为顶级Fusion属性传递。
  • Eel表达式:使用花括号 {} 包裹的表达式,如 {props.title},会被解析为Eel表达式。
  • Spread语法:支持类似ES6的Spread语法 {...expression},可以将一个Fusion数据结构的所有属性应用到当前原型上。这对于动态传递大量属性非常有用(需要Neos >= 4.2)。

    会被转换为一系列 @apply 语句,实现属性的合并和覆盖。

  • 子节点处理
    • 如果AFX标签只有一个子节点,它会直接渲染到父节点的content属性。
    • 如果AFX标签有多个子节点,它们会被渲染为 Neos.Fusion:Join 对象,并作为父节点的content
    • 可以使用 @key 属性为子节点指定Fusion属性名,否则会使用 item_1, item_2 等默认索引。
    • @path 属性允许你将子节点渲染到父节点指定路径下的Fusion属性,而不是默认的content
  • Meta属性:以 @ 开头的属性,如 @if.hasSubtitle,会被直接添加到生成的Fusion原型上,用于条件渲染、处理流程等。
  • 空白和换行:AFX对空白字符的处理进行了优化,例如文本字面量中的多行空白会折叠为单个空格,而与换行符相连的空白通常会被忽略,以保持代码简洁。

实际应用示例

AFX的强大之处在于它能与现有的Fusion机制无缝结合。

1. 渲染集合 (Neos.Fusion:Collection)

当你需要迭代渲染列表项时,AFX与Neos.Fusion:Collection的结合非常优雅:

prototype(Vendor.Site:IterationExample) < prototype(Neos.Fusion:Component) {
    items = null // 例如: array {[href:'...', title:'...'], ...}

    renderer = afx`
        
` }

这里,@path='itemRenderer'

  • 元素渲染到Neos.Fusion:CollectionitemRenderer属性中,而不是默认的content,使得结构更加清晰。

    2. 增强子组件 (Neos.Fusion:Augmenter)

    Neos.Fusion:Augmenter允许你在不修改子组件API的情况下,为其添加额外的属性。AFX让这种模式变得更加直观:

    prototype(PackageFactory.AtomicFusion.AFX:SliderExample) < prototype(Packagefactory.AtomicFusion:Component) {
      images = ${[]}
      renderer = afx`
         
    ` }

    在这个例子中,Neos.Fusion:Augmenter为每个Vendor.Site:ImageExample实例动态添加了class="slider__slide"data-index属性,而ImageExample原型本身无需感知这些外部的修改。

    总结与优势

    neos/fusion-afx 是Neos开发者工具箱中一个不可多得的利器。它的核心优势在于:

    • 代码简洁性与可读性:极大地减少了Fusion代码的冗余,使其更接近传统HTML模板,便于快速理解和维护。
    • 组件化开发体验:提供了更接近前端框架(如React)的组件编写体验,让开发者能更专注于组件的结构和逻辑。
    • 无需额外模板文件:将视图逻辑直接集成到Fusion文件中,简化了项目结构。
    • 强大的可扩展性:由于最终生成的是标准Fusion代码,你可以继续利用Fusion的强大功能进行扩展和重写。
    • 提升开发效率:减少了样板代码的编写,加快了组件的开发速度。

    如果你也曾为冗长的Fusion代码而烦恼,那么我强烈推荐你尝试一下neos/fusion-afx。它不仅能让你的代码更优雅、更易读,还能显著提升你的开发体验和效率,让你在Neos开发中如虎添翼!

  • 相关专题

    更多
    composer是什么插件
    composer是什么插件

    Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    150

    2023.12.25

    html版权符号
    html版权符号

    html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    616

    2023.06.14

    html在线编辑器
    html在线编辑器

    html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

    657

    2023.06.21

    html网页制作
    html网页制作

    html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

    470

    2023.07.31

    html空格
    html空格

    html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

    245

    2023.08.01

    html是什么
    html是什么

    HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

    2898

    2023.08.11

    html字体大小怎么设置
    html字体大小怎么设置

    在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

    507

    2023.08.11

    html转txt
    html转txt

    html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

    312

    2023.08.31

    菜鸟裹裹入口以及教程汇总
    菜鸟裹裹入口以及教程汇总

    本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

    0

    2026.01.22

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    第二十四期_PHP8编程
    第二十四期_PHP8编程

    共86课时 | 3.4万人学习

    成为PHP架构师-自制PHP框架
    成为PHP架构师-自制PHP框架

    共28课时 | 2.4万人学习

    第二十三期_PHP编程
    第二十三期_PHP编程

    共93课时 | 6.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号