2015-08-13 45 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()上解決類。

相關問題