如何防止 ApiGen 在替换 @link 时使用完全限定名称

How to prevent ApiGen from using fully-qualified names when replacing @link

我们目前使用 ApiGen 来记录我们的 PHP classes。在我们的文档注释中,有很多像这样的内联 @link 语句:

{@link AbstractValidatableItem}

当 运行 ApiGen 时,语句扩展为 link 像这样(请忽略 href):

\NSLevel1\NSLevel2\NSLevel3\AbstractValidatableItem

许多内联 links,这会创建一个几乎不可读的文本。因此,我想要一个 link,只有简单的 class、接口或方法名称:

AbstractValidatableItem

有没有办法在不打补丁的情况下用 ApiGen 做到这一点?我已经试过了

{@link AbstractValidatableItem AbstractValidatableItem}

但这似乎破坏了 link.

的解析

这不是我的首选解决方案,但我设法快速修补 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()