【发布时间】:2012-06-13 03:29:08
【问题描述】:
我正在构建一个自定义验证器。在控制器中,我将使用以下方法获取安全上下文:
$this->get('security.context')->getToken()->getUser()
我无法在自定义验证器中做同样的事情;谁能帮帮我?
非常感谢!
【问题讨论】:
标签: validation symfony
我正在构建一个自定义验证器。在控制器中,我将使用以下方法获取安全上下文:
$this->get('security.context')->getToken()->getUser()
我无法在自定义验证器中做同样的事情;谁能帮帮我?
非常感谢!
【问题讨论】:
标签: validation symfony
您需要使用您的过滤器类扩展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]
然后使用construct方法?
protected $security_context;
public function __construct($security_context){
$this->security_context = $security_context;
}
【讨论】:
["@security.context"]
[@security.context]。