2016-01-20 55 views
3

我想使用編譯器傳遞來檢查所有標記了特定標記的服務,並使用其一些公有方法注入配置詳細信息。標籤本身允許我這樣做,但我需要確保服務確實有這些方法,這就是爲什麼我使用所有這些接口。Symfony Container - 實現接口的標記服務

在繼續進行注入之前,編譯器中是否有方法檢查特定服務是否實現給定的接口。當然,如果方法不存在,它將會失敗,但是接口檢查可以更好地控制服務定義。

在定義類中找不到它。 Symfony在編譯容器時是否支持這種檢查。

回答

3

Definition類的getClass()方法返回爲特定服務配置的類。然後,您可以使用is_subclass_of()功能檢查,如果這個類實現某個接口(自PHP 5.3.7這個工程):

if (is_subclass_of($definition->getClass(), 'SomeInterface')) { 
    // do whatever you want here 
} 

你必須要小心,雖然讓你的編譯過程運行儘可能晚地爲其他通行證在您的通行證執行後仍可能會改變定義的類別。

+0

謝謝,這完美的作品! –