讲师中心 微信公众号
AI工具推荐 视频效率加速

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

夏宇大大_3044

夏宇大大_3044

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

|

504人浏览过

|

来源于php中文网

原创

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

作为Neos CMS的开发者,我曾经也为Fusion代码的冗长和复杂性所困扰。每次构建一个稍微复杂一点的组件,都需要嵌套大量的Neos.Fusion:Tag和Neos.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:Tag、Neos.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`
       <div>
         <h1 @key="headline" class="headline">{props.title}</h1>
         <h2 @key="subheadline" class="subheadline" @if.hasSubtitle={props.subtitle ? true : false}>{props.subtitle}</h2>
         <Vendor.Site:Image @key="image" uri={props.imageUri} />
       </div>
    `
}

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

AFX 的核心语法规则

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

ImageMagick 批处理处理器
ImageMagick 批处理处理器

使用 ImageMagick 的 convert 和 mogrify 命令进行批量图像处理,支持调整大小、裁剪、水印和格式转换。与 libvips 集成以实现高性能缩略图生成。

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

    会被转换为一系列 @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`
        <ul @if.has={props.items ? true : false}>
            <Neos.Fusion:Collection collection={props.items} itemName="item">
                <li @path='itemRenderer'>
                    <Vendor.Site:LinkExample {...item} />
                </li>
            </Neos.Fusion:Collection>
        </ul>
    `
}

这里,@path='itemRenderer' 将<li>元素渲染到Neos.Fusion:Collection的itemRenderer属性中,而不是默认的content,使得结构更加清晰。

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

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

prototype(PackageFactory.AtomicFusion.AFX:SliderExample) < prototype(Packagefactory.AtomicFusion:Component) {
  images = ${[]}
  renderer = afx`
     <div class="slider">
        <Neos.Fusion:Collection collection={props.images} itemName="image" iterationName="iteration" @children="itemRenderer">
            <Neos.Fusion:Augmenter class="slider__slide" data-index={iteration.index}>
                <Vendor.Site:ImageExample {...image} />
            </Neos.Fusion:Augmenter>
        </Neos.Fusion:Collection>
     </div>
  `
}

在这个例子中,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工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

364

2023.12.25

Composer 安装与快速入门指南
Composer 安装与快速入门指南

面向 PHP 开发新手,详细介绍 Composer 的下载安装方式(本地安装与全局安装)、国内镜像源(阿里云/腾讯云)加速配置、composer.json 与 composer.lock 文件的作用解析、require/install/update 等核心命令的使用方法,帮助开发者快速掌握 PHP 依赖管理的基本工作流。

603

2026.04.10

Composer 依赖管理与版本控制实战
Composer 依赖管理与版本控制实战

深入讲解 Composer 的依赖管理机制,涵盖语义化版本号规范、版本约束符(^、~、*、>=)的区别与最佳实践、composer.lock 在团队协作中的锁定策略、依赖冲突的排查与解决方法、require-dev 与生产依赖的分离管理、平台依赖检查(platform-check)等进阶内容,帮助开发者在项目中精准控制依赖版本、避免"依赖地狱"。

367

2026.04.10

Composer 自定义包开发与发布教程合集
Composer 自定义包开发与发布教程合集

以实际项目为导向,讲解如何从零创建一个符合规范的 Composer 包,涵盖 composer.json 元信息配置、PSR-4 自动加载规则设置、命名空间规划、单元测试集成、README 与 LICENSE 编写规范,以及将包提交到 Packagist 公共仓库或搭建 Satis/Private Packagist 私有仓库的完整发布流程,帮助开发者将可复用代码封装为标准化的 Composer 包。

389

2026.04.10

Composer 自动加载机制与性能优化
Composer 自动加载机制与性能优化

系统剖析 Composer 的自动加载体系,讲解 PSR-0 与 PSR-4 自动加载标准的区别与演进、classmap 与 files 加载方式的适用场景、autoload_real.php 源码级加载流程解析,同时介绍 composer dump-autoload -o 优化加载映射、APCu 缓存加速、authoritative-classmap 配置等生产环境性能优化手段,帮助开发者深入理解自动加载原理并提升项目启动速度。

340

2026.04.13

Composer 在主流 PHP 框架中的应用实践
Composer 在主流 PHP 框架中的应用实践

结合 Laravel、ThinkPHP、Symfony 等主流 PHP 框架的实际场景,讲解 Composer 在框架项目中的典型应用,包括通过 create-project 初始化框架项目、安装与管理第三方扩展包、scripts 钩子(post-install/post-update)自动执行部署任务、自定义 Installer 插件开发、多项目共享 vendor 依赖的 Monorepo 工作流管理,帮助开发者在真实框架项目中充分发

543

2026.04.13

Composer 镜像源配置与网络问题排查
Composer 镜像源配置与网络问题排查

针对国内开发者常遇到的 Composer 网络问题,详细讲解阿里云、腾讯云、华为云等国内镜像源的全局与项目级切换方法、多镜像源优先级配置策略、composer config 命令行快速设置技巧,同时涵盖 SSL 证书错误、连接超时、下载中断等常见网络报错的排查与修复方案,以及利用 artifact / path 仓库实现完全离线环境下的依赖安装。

331

2026.04.14

Composer Scripts 脚本与自动化工作流
Composer Scripts 脚本与自动化工作流

系统讲解 Composer Scripts 机制的完整用法,涵盖 pre-install、post-update、post-autoload-dump 等内置事件钩子的触发时机与应用场景、自定义脚本命令的定义与参数传递、调用外部 Shell 命令与 PHP 静态方法、多脚本串联执行与条件判断,以及结合代码检查(PHPStan/PHP-CS-Fixer)、数据库迁移、缓存清理等任务构建一键部署自动化工作流。

410

2026.04.14

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn