2014-10-01 53 views
1

我有一個擴展的裝飾,說:Silverstripe 3.1:如何知道哪些類是由DataExtension

class UselessExtension extends DataExtension { 
    public function sayHello() { 
     echo "hello"; 
    } 
} 

我用它通過YAML配置擴展兩個類:

Member: 
    extensions: 
    - UselessExtension 
MyDataObject: 
    extensions: 
    - UselessExtension 

SilverStripe中是否有任何函數需要調用才能知道我的UselessExtension擴展了哪些類?

我在尋找類似

DataExtension::getDecoratedBy('UselessExtension'); 

回答

3

據我所知,有方法中沒有內置該所以你需要編寫自己的。

類似的東西來這應該工作:

function getDecoratedBy($extension){ 
    $classes = array(); 
    foreach(ClassInfo::subClassesFor('Object') as $className) { 
     if (Object::has_extension($className, $extension)){ 
      $classes[] = $classname; 
     } 
    } 
    return $classes; 
} 
+0

這正是我一直在尋找,非常感謝。這是一個性能殺手,但我不得不在後臺任務中使用它,所以這不是一個大問題。 – g4b0 2014-10-02 12:37:19

+0

同意它是一個性能殺手。這不應該在循環中使用,或者該函數的結果應該緩存在內存中以提高性能。 – jfbarrois 2014-10-02 18:59:23

相關問題