Как запретить ApiGen использовать полные имена при замене @link

В настоящее время мы используем ApiGen документировать наши классы PHP. В наших комментариях к документам есть много встроенных @link заявления как это:

{@link AbstractValidatableItem}

При запуске ApiGen оператор расширяется до такой ссылки (пожалуйста, игнорируйте href):

\ NSLevel1 \ NSLevel2 \ NSLevel3 \ AbstractValidatableItem

Со многими встроенными ссылками это создает почти нечитаемый текст. Поэтому я хочу иметь ссылку только с простым именем класса, интерфейса или метода:

AbstractValidatableItem

Есть ли способ сделать это с ApiGen без исправления? Я уже пробовала

{@link AbstractValidatableItem AbstractValidatableItem}

но это, кажется, нарушает разбор ссылки.

2

Решение

Это не мое предпочтительное решение, но мне удалось быстро исправить 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() на разрешенные занятия.

0

Другие решения

Других решений пока нет …