如果您发现本指南中缺少任何内容,请随时提交拉取请求到我们的仓库!任何帮助都将不胜感激!
doctrine/dbal,但如果你的应用程序仍然需要它,并且你没有直接安装它,你应该将其添加到你的 composer.json 文件中。升级脚本并非升级指南的替代品。它处理了升级指南中未提及的许多小改动,但它不处理所有重大变更。您仍应阅读手动升级步骤,以了解您需要对代码进行哪些更改。
您正在使用的一些插件可能尚不支持v4。您可以暂时将它们从您的 composer.json 文件中移除,直到它们升级完毕,将它们替换为v4兼容的类似插件,等待插件升级后再升级您的应用程序,甚至提交PR来帮助作者升级它们。
升级您的 Filament 应用程序的第一步是运行自动化升级脚本。此脚本将自动将您的应用程序升级到最新版本的 Filament,并修改您的代码,从而处理大部分重大更改:
composer require filament/upgrade:"^4.0" -W --dev
vendor/bin/filament-v4
# Run the commands output by the upgrade script, they are unique to your app
composer require filament/filament:"^4.0" -W --no-update
composer update当使用 Windows PowerShell 安装 Filament 时,你可能需要运行下面的命令,因为它会忽略版本约束中的 ^ 字符:
composer require filament/upgrade:"~4.0" -W --dev
vendor/bin/filament-v4
# Run the commands output by the upgrade script, they are unique to your app
composer require filament/filament:"~4.0" -W --no-update
composer update如果升级脚本安装失败,请确保您的 PHPStan 版本至少为 v2,或您的 Larastan 版本至少为 v3。该脚本使用 Rector v2,这需要 PHPStan v2 或更高版本。
请务必仔细遵循说明,并检查脚本所做的更改。之后您可能需要对您的代码进行一些手动更改,但脚本应能为您处理大部分重复性工作。
Filament v4 引入了一种新的默认目录结构,用于您的 Filament 资源和集群。如果您正在使用包含资源和集群的 Filament 面板,您可以选择保留旧的目录结构,或者迁移到新的目录结构。如果您想迁移到新的目录结构,您可以运行以下命令:
php artisan filament:upgrade-directory-structure-to-v4 --dry-run--dry-run 选项将向您展示该命令会执行哪些操作,而不会实际进行任何更改。如果您对这些更改满意,可以不带 --dry-run 选项来运行该命令以应用这些更改:
php artisan filament:upgrade-directory-structure-to-v4此目录升级脚本无法完美更新资源和集群文件中存在的、对同一命名空间内类的任何引用,并且在脚本运行后,这些引用将需要手动更新。你应该使用诸如PHPStan之类的工具来识别在升级后已损坏的对类的引用。
你现在可以 composer remove filament/upgrade --dev 因为你不再需要它了。
Filament v4 中的某些更改可以通过配置文件进行恢复。如果您尚未发布配置文件,可以通过运行以下命令来完成:
php artisan vendor:publish --tag=filament-config首先,default_filesystem_disk 在 v4 中被设置为 FILESYSTEM_DISK 变量而不是 FILAMENT_FILESYSTEM_DISK。为了保留 v3 的行为,请确保使用此设置:
return [
// ...
'default_filesystem_disk' => env('FILAMENT_FILESYSTEM_DISK', 'public'),
// ...
]v4 引入了一些更改,影响了 Filament 生成文件的方式。一个新的 file_generation 部分已添加到 v4 配置文件中,以便您可以回退到 v3 样式,如果您希望新代码与升级前的外观保持一致。如果您的配置文件还没有 file_generation 部分,您应该自己添加它,或者重新发布配置文件并根据您的喜好进行调整:
use Filament\Support\Commands\FileGenerators\FileGenerationFlag;
return [
// ...
'file_generation' => [
'flags' => [
FileGenerationFlag::EMBEDDED_PANEL_RESOURCE_SCHEMAS, // Define new forms and infolists inside the resource class instead of a separate schema class.
FileGenerationFlag::EMBEDDED_PANEL_RESOURCE_TABLES, // Define new tables inside the resource class instead of a separate table class.
FileGenerationFlag::PANEL_CLUSTER_CLASSES_OUTSIDE_DIRECTORIES, // Create new cluster classes outside of their directories. Not required if you run `php artisan filament:upgrade-directory-structure-to-v4`.
FileGenerationFlag::PANEL_RESOURCE_CLASSES_OUTSIDE_DIRECTORIES, // Create new resource classes outside of their directories. Not required if you run `php artisan filament:upgrade-directory-structure-to-v4`.
FileGenerationFlag::PARTIAL_IMPORTS, // Partially import components such as form fields and table columns instead of importing each component explicitly.
],
],
// ...
]filament/upgrade 包包含一个命令,可帮助您将面板资源和集群移动到新的目录结构,这是 v4 中的默认设置:
php artisan filament:upgrade-directory-structure-to-v4 --dry-run--dry-run 选项将向您展示该命令会执行什么操作,但不会实际进行任何更改。如果您对这些更改满意,可以运行不带 --dry-run 选项的命令来应用这些更改:
php artisan filament:upgrade-directory-structure-to-v4此目录升级脚本无法完美更新存在于资源和集群文件中的对同一命名空间中类的任何引用,且这些引用需要在脚本运行后手动更新。您应该使用诸如PHPStan的工具来识别升级后已损坏的类引用。
一旦你运行了该命令,你无需保留 FileGenerationFlag::PANEL_CLUSTER_CLASSES_OUTSIDE_DIRECTORIES 或 FileGenerationFlag::PANEL_RESOURCE_CLASSES_OUTSIDE_DIRECTORIES 标志在你的配置文件中,因为新的目录结构现在已是默认设置。你可以将它们从 file_generation.flags 数组中移除。
首先,通过仅选择您项目中使用的包,来筛选出符合您特定需求的升级指南: