我目前正在实施 Doctrinefilters http://docs.doctrine-project.org/en/latest/reference/filters.html在我的 Symfony2.1 项目中,具有以下设置:
<?php
namespace Acme\Bundle\Entity;
class Article {
/**
* @ORM\Column(type="string")
*/
private $status;
...
}
//app/config/config.yml
doctrine:
orm:
filters:
status:
class: Acme\Bundle\Filter\StatusFilter
enabled: false
....
//src/Acme/Bundle/Filter/StatusFilter.php
namespace Acme\Bundle\Filter;
use Acme\Bundle\Entity\Status;
class StatusFilter extends SQLFilter {
public function addFilterConstraint(ClassMetadata $target, $alias)
{
$filter =
$target->reflClass->implementsInterface('Acme\Bundle\Entity\Status')?
$alias . '.status = ' . Status::PUBLISHED : '';
return $filter;
}
}
其中 Acme\Bundle\Entity\Status 只是一个接口。
当过滤器启用时,代码按预期工作config.yml
.
问题是我无法检索所有管理文章!
有没有办法为某个捆绑包启用此过滤器?
附注我知道如何使用 EntityManager 启用和禁用过滤器,
我只是找不到合适的地方来为前端捆绑包执行此操作。
我的管理部分可以通过路由前缀访问myadmin
www.example.com/myadmin/ -> 管理部分 = 禁用过滤器(配置中默认禁用)
www.example.com/... -> 任何其他 = 启用过滤器。
查看 Doctrine 代码,有一些方法可以启用和禁用过滤器。
在 config.yml 文件中定义过滤器后,您可以在控制器或服务中启用/禁用:
// 'status' is the unique name of the filter in the config file
$this->getDoctrine()->getManager()->getFilters()->enable('status');
$this->getDoctrine()->getManager()->getFilters()->disable('status');
注意:这取自 Symfony 2.3。您需要使用先前版本的 Symfony/Doctrine 对此进行测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)