我有一个函数需要知道传入的实体的包快捷方式名称。
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
答案 0 :(得分:1)
试着看一下:
$className = explode("\\", get_class($document));
它会返回一个包含所有需要的数组;) 如果你创建和回显$ className,你会看到结构,我认为它可以适合你的问题。