2012-03-01 94 views
1

如何從實體中獲取軟件包的名稱?從實體中獲取軟件包名稱

是否有任何功能或服務來獲得此?

$artist = new Artist(); 

$bundleName = artist->getBundleName(); 

echo $bundleName 

myCompanyArtistBundle

回答

0

我找到了一個解決方案,但不知道這是否是一個很好的一個:

<?php 
    $rootEntityName = "company\myNamespace\Entity\user"; 

    $bundles = $context->get('kernel')->getBundles(); 
    $bundleName = ''; 

    foreach($bundles as $type=>$bundle){ 
     $className = get_class($bundle); 

     $entityClass = substr($rootEntityName,0,strpos($rootEntityName,'\\Entity\\')); 

     if(strpos($className,$entityClass)=== FALSE){ 
      echo get_class($bundle).'<br>'; 
      echo $type.'<br>'; 
     }else{ 
      $bundleName = $type; 
     } 
    } 
    echo $bundleName; 
0

我喜歡這個解決方案:

/** 
* Get the bundle name from an Entity namespace 
* 
* @return string 
* @author lenybernard 
**/ 
protected static function getBundleNameFromEntity($entityNamespace, $bundles) 
{ 
    $dataBaseNamespace = substr($entityNamespace, 0, strpos($entityNamespace, '\\Entity\\')); 
    foreach ($bundles as $type => $bundle) { 
     $bundleRefClass = new \ReflectionClass($bundle); 
     if ($bundleRefClass->getNamespaceName() === $dataBaseNamespace) { 
      return $type; 
     } 
    } 
} 

Nota bene:$bundles變量是調用kernel服務上的getBundles()方法的結果。