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语法非常直观,但也有一些值得注意的规则:

Pixso AI
Pixso AI

Pixso AI是一款智能生成设计稿工具,通过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开发中如虎添翼!

  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

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

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

    154

    2023.12.25

    es6新特性
    es6新特性

    es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

    106

    2023.07.17

    es6新特性有哪些
    es6新特性有哪些

    es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

    195

    2023.08.04

    JavaScript ES6新特性
    JavaScript ES6新特性

    ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    222

    2025.12.24

    if什么意思
    if什么意思

    if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

    779

    2023.08.22

    pdf怎么转换成xml格式
    pdf怎么转换成xml格式

    将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    1903

    2024.04.01

    xml怎么变成word
    xml怎么变成word

    步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

    2092

    2024.08.01

    xml是什么格式的文件
    xml是什么格式的文件

    xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

    1081

    2024.11.28

    C++ 设计模式与软件架构
    C++ 设计模式与软件架构

    本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

    14

    2026.01.30

    热门下载

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

    精品课程

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

    共86课时 | 3.4万人学习

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

    共28课时 | 2.5万人学习

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

    共93课时 | 6.9万人学习

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

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