Symfony4中自定义Doctrine类型注册及参数传递问题
在Symfony Kernel的boot()方法中配置自定义Doctrine类型的参数
要给你注册的MyType设置前缀参数其实很简单——因为Doctrine的自定义类型是以单例形式注册的,你只需要在Kernel的boot()方法中获取到这个类型的实例,直接调用它的setPrefix()方法就行。
具体实现步骤如下:
- 修改你的Kernel类(通常是
src/Kernel.php),重写boot()方法(如果还没重写的话) - 确保容器初始化完成后,获取Doctrine注册的
my_type实例 - 调用
setPrefix()传入你的自定义前缀值
下面是完整的代码示例:
// src/Kernel.php namespace App; use App\Doctrine\Types\MyType; use Doctrine\DBAL\Types\Type; use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; use Symfony\Component\HttpKernel\Kernel as BaseKernel; class Kernel extends BaseKernel { use MicroKernelTrait; public function boot(): void { // 先调用父类boot方法,确保Symfony容器和Doctrine组件完成初始化 parent::boot(); // 获取已注册的自定义类型实例并设置前缀 if (Type::hasType('my_type')) { /** @var MyType $myType */ $myType = Type::getType('my_type'); $myType->setPrefix('your-custom-prefix-value'); } } }
补充说明
- Doctrine启动时会根据你
doctrine.yml中的配置,把MyType实例注册到全局类型注册表中,所以Type::getType('my_type')拿到的是全局唯一的实例,设置前缀后所有使用该类型的地方都会生效 - 加入
Type::hasType('my_type')的判断,是为了避免在部分特殊环境(比如未配置该类型的测试环境)中抛出错误 - 如果你需要从容器中获取配置值作为前缀,也可以直接通过
$this->getContainer()->getParameter('your.parameter.key')来获取
内容的提问来源于stack exchange,提问作者Nin
相关产品推荐
相关产品推荐

