Gin*_*tro 4 configuration filter symfony doctrine-orm symfony-2.1
我正在使用以下设置在Symfony2.1项目中实现Doctrine 过滤器:
<?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;
}
}
Run Code Online (Sandbox Code Playgroud)
其中Acme\Bundle\Entity\Status只是一个界面.
启用过滤器时,代码按预期工作config.yml.
问题是我无法检索所有文章进行管理!
有没有办法为某个捆绑包启用此过滤器?
ps我知道如何使用EntityManager启用和禁用过滤器,
我只是找不到适合前端Bundle的地方.
我的管理部分可以通过路由前缀访问 myadmin
www.example.com/myadmin/ - > admin section =禁用过滤器(在配置中默认禁用)www.example.com/... - >其他=启用过滤器.
And*_*rew 13
查看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');
Run Code Online (Sandbox Code Playgroud)
注意:这是从Symfony 2.3中获取的.您需要使用以前版本的Symfony/Doctrine进行测试.
在学说层面没有束的概念.我看到的唯一方法是通过在kernel.request事件或kernel.controller事件期间解析其className(反射,...)来检测使用哪个控制器.
你可以从这个例子中激励自己:
然后,如果您检测到您的控制器在FrontendBundle,只需禁用/启用您的学说过滤器.
如果您更喜欢使用路由来检测何时禁用/启用,只需使用kernel.request事件.例如,您可以访问所有请求参数$event->getRequest()->attributes->get('_controller').