必须将security.yaml中remember_me的'%secret%'替换为'%env(app_secret)%',并确保.env定义app_secret、删除parameters.yml、验证kernel.secret;同时移除templating配置、更新serializer和doctrine配置、复核bundles.php及recipes。

从 Symfony 4.3 升级到 4.4 属于同一大版本内的小版本迭代,整体兼容性较好,但仍有几处关键配置需手动检查和调整。官方明确将 4.4 设为 LTS 版本,同时移除了部分已废弃功能,因此不能跳过验证。
security.yaml 中 remember_me 的 secret 引用必须更新
Symfony 4.4 彻底弃用全局 secret 参数,仅保留 kernel.secret(由 APP_SECRET 环境变量驱动)。若 security.yaml 中仍存在:
remember_me:
secret: '%secret%'
就会触发 “You have requested a non-existent parameter 'secret'” 错误,所有命令(包括 cache:clear)都会失败。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 将所有
'%secret%'替换为'%env(APP_SECRET)%' - 确认
.env文件中已定义APP_SECRET=...(建议 32 字符以上) - 运行
php bin/console debug:container --parameter=kernel.secret验证是否可读取 - 删除项目中残留的
app/config/parameters.yml或parameters.php(4.4 不再加载)
framework.yaml 中的某些选项已被移除或重命名
4.4 清理了部分长期废弃的配置项,尤其在 framework 下:
-
templating配置块被完全移除(自 4.3 起已废弃),若仍在使用 Twig,请确保只依赖twig-bundle,并删除templating: { engines: ['twig'] }这类配置 -
form和csrf_protection默认启用,但若显式设为false,需确认是否真不需要——4.4 对 CSRF 的默认行为更严格 -
serializer的enable_annotations已废弃,改用annotation_enabled: true(如启用)
doctrine/doctrine-bundle 升级可能影响 dbal 配置
若你同步升级了 doctrine/doctrine-bundle 到 2.x(推荐配合 4.4),其对 doctrine.dbal 的要求更严格:
-
doctrine.dbal.types中自定义类型注册方式不变,但若使用mapping_types,请确认键名与 DBAL 实际支持类型一致(如enum在 MySQL 中需显式映射) -
doctrine.dbal.default_table_options若含charset或collate,建议改为options: { charset: utf8mb4, collate: utf8mb4_unicode_ci }格式(新写法更稳定) - 检查
config/packages/doctrine.yaml是否硬编码了url;优先使用%env(resolve:DATABASE_URL)%,避免环境切换失效
recipes 和 bundles.php 的启用逻辑需复核
Symfony Flex recipes 在 4.4 中更强调条件启用:
- 打开
config/bundles.php,检查每个 bundle 的启用条件(如if (class_exists(...)))是否仍成立——例如,若移除了symfony/form,但framework.yaml里还留着form: true,会报错 - 运行
composer recipes查看哪些 recipe 处于dirty状态,必要时执行composer recipes:install --force同步官方模板 - 留意
symfony/maker-bundle的 recipe 是否把make:migration相关配置写入了config/packages/maker.yaml,该文件在生产环境应被排除(加when@prod:条件)










