You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将FilamentPHP中的Heroicon版本从v1更换为v2?

解决FilamentPHP 2.x切换到Heroicon v2的问题

核心原因

FilamentPHP 2.x的filament/forms等核心包强制依赖blade-ui-kit/blade-heroicons ^1.2(即Heroicon v1),所以无法直接替换为纯v2版本,只能同时兼容v1和v2,再手动让Filament调用v2图标。

解决步骤

  1. 确保同时安装v1和v2版本
    你的composer.json中已经设置了^1.2|^2.10,执行以下命令确保依赖安装完成:

    composer update blade-ui-kit/blade-heroicons
    
  2. 自定义Filament图标注册
    在app/Providers/AppServiceProvider.php的boot方法中,注册v2图标替换Filament默认的v1图标:

    use Filament\Facades\Filament;
    use Illuminate\Support\Facades\Blade;
    
    public function boot()
    {
        // 注册单个图标替换示例
        Filament::registerIcons([
            'user' => Blade::render('<x-heroicon-o-user />'), // v2 outline图标
            'user-solid' => Blade::render('<x-heroicon-s-user />'), // v2 solid图标
            // 按需添加你需要替换的其他图标,比如dashboard、settings等
        ]);
    
        // 全局替换图标解析逻辑
        Filament::resolveUsing(function ($name) {
            // 将Filament默认的v1前缀映射到v2组件
            if (str_starts_with($name, 'heroicon-o-')) {
                return Blade::render('<x-heroicon-o-' . substr($name, 11) . ' />');
            }
            if (str_starts_with($name, 'heroicon-s-')) {
                return Blade::render('<x-heroicon-s-' . substr($name, 11) . ' />');
            }
            return $name;
        }, 'icon');
    }
    
  3. 覆盖Filament视图(可选,彻底替换)
    如果图标注册方式不够彻底,可发布Filament视图文件并修改图标引用:

    php artisan vendor:publish --tag=filament-views
    

    找到resources/views/vendor/filament下所有包含x-heroicon-o-或x-heroicon-s-的文件,替换为v2对应的组件(注意v2部分图标名称有调整,需核对图标库)。

注意事项

  • Heroicon v2部分图标名称与v1有差异,需对照官方图标库确认。
  • 由于Filament 2.x核心依赖v1,无法完全卸载v1版本,必须保留以避免依赖冲突。

内容的提问来源于stack exchange,提问作者amkha wasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:00:45