2

カスタムバリデーターを構築しています。コントローラでは、次を使用してセキュリティ コンテキストを取得します。

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

カスタムバリデーターで同じことを行うことはできません。誰でも私を助けることができますか?

本当にありがとう!

4

1 に答える 1

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を確認して、ドクトリンエンティティのコンテナ対応のアイデアを拡張してください。役立つかもしれません。

編集

バリデーターのドキュメントを見ると、依存関係がある場合はサービスを追加できます。

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;   
}
于 2012-06-13T05:16:14.727 に答える