提取Symfony实体的命名空间或分发包快捷方式

时间:2014-08-06 00:22:10

标签: php symfony

我有一个函数需要知道传入的实体的包快捷方式名称。

public function doSomething($entity) {
     $bundleShortcut = SOMEFUNCTION($entity);
     // ... do other stuff and return a value ...
}

我希望让它返回我的实体的捆绑快捷方式名称:

GutensiteCmsBundle:ViewVersion

这可能吗?实体经理是否可以某种方式访问​​此元数据?

我知道我可以在我的所有实体中预先注册该名称:

class ViewVersion {
    protected $bundleName = 'GutensiteCmsBundle:ViewVersion';
    public function getBundleName() {
        return $this->bundleName;
    }
}

然后我可以做:

$entity->getBundleName();

但那是蹩脚的。

根据@ Chamlee的回答,这是我使用的功能:

public function getEntityBundleShortcut($entity) {
    // wrap in EntityManager's Class Metadata function avoid problems with cached proxy classes
    $path = explode('\Entity\\', $this->em->getClassMetadata(get_class($entity))->getName());
    return str_replace('\\', '', $path[0]).':'.$path[1];
}

因此,以下实体是返回值:

// Entity
Gutensite\ArticleBundle\Entity\Article
// Returns
GutensiteArticleBundle:Article


// Entity
Gutensite\CmsBundle\Entity\View\ViewVersion
// Returns
GutensiteArticleBundle:View\ViewVersion

1 个答案:

答案 0 :(得分:1)

试着看一下:

$className = explode("\\", get_class($document));

它会返回一个包含所有需要的数组;) 如果你创建和回显$ className,你会看到结构,我认为它可以适合你的问题。