2015-08-13 20 views
2

我们目前使用ApiGen来记录我们的PHP类。里面我们的文档注释,也有很多内嵌的@link声明是这样的:如何在替换@link时防止ApiGen使用完全限定名称

{@link AbstractValidatableItem} 

当运行ApiGen,语句扩展到像这样的链接(请忽略href):

\NSLevel1\NSLevel2\NSLevel3\AbstractValidatableItem

有了许多内联链接,这会创建一个几乎不可读的文本。因此,我想有只用简单的类,接口或者方法名称的链接:

AbstractValidatableItem

有没有办法用ApiGen做到不打补丁呢?我已经试过

{@link AbstractValidatableItem AbstractValidatableItem} 

但这似乎打破了链接的解析。

回答

0

这不是我的首选解决方案,但我设法快速补丁ApiGen来解决这个问题对我来说:

--- apigen/apigen/src/Templating/Filters/Helpers/ElementLinkFactory.php.orig Do Aug 13 14:51:13 2015 
+++ apigen/apigen/src/Templating/Filters/Helpers/ElementLinkFactory.php Do Aug 13 14:51:33 2015 
@@ -39,6 +39,7 @@ class ElementLinkFactory 
     $this->linkBuilder = $linkBuilder; 
    } 

+ private $FULLY_QUALIFIED_NAMES=false; 

    /** 
    * @return string 
@@ -75,7 +76,7 @@ class ElementLinkFactory 
    { 
     return $this->linkBuilder->build(
      $this->elementUrlFactory->createForClass($reflectionClass), 
-   $reflectionClass->getName(), 
+   $this->FULLY_QUALIFIED_NAMES ? $reflectionClass->getName() : $reflectionClass->getShortName(), 
      TRUE, 
      $classes 
     ); 
@@ -89,7 +90,7 @@ class ElementLinkFactory 
    { 
     return $this->linkBuilder->build(
      $this->elementUrlFactory->createForMethod($reflectionMethod), 
-   $reflectionMethod->getDeclaringClassName() . '::' . $reflectionMethod->getName() . '()', 
+   ($this->FULLY_QUALIFIED_NAMES ? $reflectionMethod->getDeclaringClass()->getName() : $reflectionMethod->getDeclaringClass()->getShortName()) . '::' . ($this->FULLY_QUALIFIED_NAMES ? $reflectionMethod->getName() : $reflectionMethod->getShortName()) . '()', 
      FALSE, 
      $classes 
     ); 

补丁使得它使用getShortName()而不是getName()上解决类。

相关问题