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

Symfony中Doctrine Migrations配置的%kernel.project_dir%未插值问题

Doctrine Migrations配置中%kernel.project_dir%变量未被解析的问题

环境信息

  • 项目部署于Docker容器,目录映射配置完成
  • 使用Symfony 5.1框架,已重写Kernel::getProjectDir()方法
  • 核心依赖版本:
{
  "doctrine/doctrine-bundle": "^2.1",
  "doctrine/doctrine-migrations-bundle": "^3.2",
  "doctrine/orm": "^2.7",
  "symfony/framework-bundle": "5.1.*"
}

问题描述

项目需配置两个数据库的迁移,其中一个迁移配置文件路径为容器内/opt/app/config/packages/migrations/some_config.yaml,在该配置中使用%kernel.project_dir%变量指定迁移模板路径时无效,替换为绝对路径则正常工作。

执行迁移生成命令:

bin/console doctrine:migrations:generate --configuration='/opt/app/config/packages/migrations/some_config.yaml'

抛出异常:

The specified template "%kernel.project_dir%/config/migration_template.txt" cannot be found or is not readable

调试确认%kernel.project_dir%变量未被解析为实际路径。


解决方案

原因

通过--configuration参数直接指定独立配置文件时,Doctrine Migrations Bundle不会触发Symfony的容器参数解析流程,导致框架自带的参数无法被替换。

解决方法

1. 整合配置到Symfony主配置文件

将多数据库迁移配置写入config/packages/doctrine_migrations.yaml,利用Symfony自身的参数解析能力自动处理%kernel.project_dir%:

doctrine_migrations:
    # 默认数据库配置
    migrations_paths:
        'App\Migrations\DefaultDb': '%kernel.project_dir%/migrations/DefaultDb'
    template: '%kernel.project_dir%/config/migration_template.txt'

    # 第二个数据库的配置节点
    some_db:
        migrations_paths:
            'App\Migrations\SomeDb': '%kernel.project_dir%/migrations/SomeDb'
        template: '%kernel.project_dir%/config/migration_template.txt'
        connection: some_db

执行命令时通过配置节点名称指定:

bin/console doctrine:migrations:generate --configuration=some_db

2. 使用相对路径替代变量

若必须保留独立配置文件,可基于配置文件所在路径使用相对路径:

# /opt/app/config/packages/migrations/some_config.yaml
migrations_paths:
    'App\Migrations\SomeDb': '../../migrations/SomeDb'
template: '../../config/migration_template.txt'

3. 通过环境变量传递路径

在Docker容器中设置环境变量PROJECT_DIR=/opt/app,并在配置文件中引用:

template: '%env(PROJECT_DIR)%/config/migration_template.txt'

同时在项目.env文件中添加PROJECT_DIR=%kernel.project_dir%,确保Symfony容器能正确解析。


内容的提问来源于stack exchange,提问作者Gregory Sysoev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:36