Symfony2在自定义验证器中获取安全上下文

时间:2012-06-13 03:29:09

标签: validation symfony

我正在构建一个自定义验证器。在控制器中,我将使用以下方式获取安全上下文:

$this->get('security.context')->getToken()->getUser()

我无法在自定义验证器中做同样的事情;谁能帮助我?

非常感谢!

1 个答案:

答案 0 :(得分:4)

您需要使用过滤器类扩展ContainerAware,然后在实例化时调用类上的setContainer,或者将容器传递给构造上的类。这是因为默认情况下过滤器不像容器那样知道容器。

要通过构造函数执行此操作,您可以将以下__construct方法添加到过滤器类中:

protected $container;

public function __construct($container){
    $this->container = $container;   
}

无论哪种方式,您都需要在通话中使用容器:

$this->container->get('security.context')->getToken()->getUser()

检查此链接https://groups.google.com/forum/?fromgroups#!topic/symfony2/WWIc8N7KZrg以扩展容器感知的教义实体的想法,可能会有所帮助。

修改

查看docs for validator,如果有任何依赖项,您可以添加服务:

services:
    validator.unique.your_validator_name:
        class: Fully\Qualified\Validator\Class\Name
        tags:
            - { name: validator.constraint_validator, alias: alias_name }

为什么不为容器添加一个参数:

arguments:  [@security.context] 

然后使用构造方法?

protected $security_context;

public function __construct($security_context){
    $this->security_context = $security_context;   
}