如何防止 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、接口或方法名称:
有没有办法在不打补丁的情况下用 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()
。
我们目前使用 ApiGen 来记录我们的 PHP classes。在我们的文档注释中,有很多像这样的内联 @link
语句:
{@link AbstractValidatableItem}
当 运行 ApiGen 时,语句扩展为 link 像这样(请忽略 href
):
\NSLevel1\NSLevel2\NSLevel3\AbstractValidatableItem
许多内联 links,这会创建一个几乎不可读的文本。因此,我想要一个 link,只有简单的 class、接口或方法名称:
有没有办法在不打补丁的情况下用 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()
。