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 查询