从实体中获取软件包名称

问题描述:

如何从实体中获取软件包的名称?从实体中获取软件包名称

是否有任何功能或服务来获得此?

$artist = new Artist(); 

$bundleName = artist->getBundleName(); 

echo $bundleName 

myCompanyArtistBundle

我找到了一个解决方案,但不知道这是否是一个很好的一个:

<?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; 

我喜欢这个解决方案:

/** 
* 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()方法的结果。