Doctrine 和 symfony 过滤器,调试过滤器

Posted

技术标签:

【中文标题】Doctrine 和 symfony 过滤器,调试过滤器【英文标题】:Doctrine and symfony filter, debug the filter 【发布时间】:2018-09-28 08:41:44 【问题描述】:

所以我有以下过滤器:

class ClientFilter extends SQLFilter

    public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
    
        return $targetTableAlias.'client_id = '. $this->getParameter('client_id');
    


在我的控制器中:

$em = $this->get('doctrine.orm.default_entity_manager');
$filter = $em->getFilters()->enable('client_filter');
var_dump($em->getFilters()->isEnabled('client_filter'));

它会打印出bool(true),这意味着它已启用,但是当我从 symfony 分析器查看教义 sql 命令时,我在WHERE statment 中看不到 client_id

而且我不能全局设置它,因为我只在登录后才需要它。所以问题是,我如何检查过滤器是否工作?另一个问题是如果我全局设置它有没有办法让它只在登录后工作,因为用户表没有 client_id 并且它给出了一个错误,因为客户端 id 仅在登录后添加取决于哪个用户将登录。

p.s 我在登录后将 client_id 添加到会话中!

【问题讨论】:

【参考方案1】:

因为我太垃圾了,所以我正在回答这个问题

代码中缺少的两件事:

 - $filter->setParameter('client_id',1); // 1 i usually get it from session
 - and the actual call to some function to call a db table after that code i had nothing applied but the rendering of twig template.

控制器中的代码现在如下所示:

$this->get('somerepository')->findOneById(1);

【讨论】:

以上是关于Doctrine 和 symfony 过滤器,调试过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何在symfony中禁用doctrine的软删除(软删除)过滤器

如何使用 Symfony ACL 过滤我的 Doctrine 查询

Symfony 和 Doctrine 使迁移无效

Symfony2 和 Doctrine:一对多关系

Symfony 5(Doctrine 2.9),Doctrine 不会为 ManyToOne 自引用关系生成迁移

Symfony/Doctrine 类表继承和外键作为主键