symfony - Symfony Compiler Pass:添加学说过滤器时出错
问题描述
CompilerPass
我想在我创建的捆绑包中添加一个学说过滤器。
我试过这个,我认为添加了过滤器FilterCollection
(因为我在:enable()
调用函数时调用了 dump() )。
class UserCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
$container->getDefinition('doctrine.orm.default_configuration')
->addMethodCall('addFilter', [
'deleted_at',
DeletedAtFilter::class,
])
;
$container->getDefinition('doctrine.orm.default_entity_manager')
->addMethodCall('getFilters', [], true)
->addMethodCall('enable', [
'deleted_at',
])
;
但是现在,我有这个错误:
传递给 Doctrine\Bundle\DoctrineBundle\ManagerConfigurator::configure() 的参数 1 必须实现接口 Doctrine\ORM\EntityManagerInterface,给出 Doctrine\ORM\Query\FilterCollection 的实例
我认为->addMethodCall('getFilters', [], true)
取代了原来的doctrine.orm.default_entity_manager
服务类。你知道如何避免这种行为吗?
解决方案
第三个参数 onaddMethodCall
指示 DI 编译器从该点开始使用调用的返回值作为服务实例。
正如您在方法的签名中看到的:
addMethodCall(string $method, array $arguments = [], bool $returnsClone = false)
其中第三个参数明确记录为“调用是否返回服务实例”。
如果您必须调用enable
FilterCollection 上的方法,则必须装饰配置器服务并enable
从那里调用该方法。
推荐阅读
- python-3.x - Zipfile 无法解压缩 NFS 驱动器中存在的文件
- for-loop - 用于循环的 Google Apps 脚本以获取单元格值并插入到公式中
- python - Why are some events don't execute when called?
- html - 本地 CSS 渲染为 unicode 字符
- installation - 安装 Tax4Fun 的问题
- deep-learning - 为什么我的 LSTM 自动编码器模型无法检测到异常值?
- javascript - 在 DIV 后面显示 Canvas
- ios - Swift 4.x/5.x 中是否有多个全局变量副本?如果是这样,你如何阻止它?
- rxjs - NestJS 处理 HttpModule 错误
- python - 如何使用 AJAX 使用相同的 html 模板(使用 Python 和 Django)创建和编辑新帖子?