Symfony - 注释从未被导入

Ale*_*lin 5 php annotations symfony doctrine-orm api-doc

我正在使用 Symfony 框架并打算将自动文档引擎添加到我的项目的 RESTful api 中。

经过一番搜索,我找到了 apidoc 引擎(http://apidocjs.com/)。它的工作原理非常简单:您必须为 RESTful api 的每个控制器添加一些注释,并且将生成文档。

注解的例子是:

/**
 * @Route("/api/dictionary_list/{userId}/{sessionKey}", name="api/dictionary_list")
 * @api {get} /api/dictionary_list/{userId}/{sessionKey} 01. Values list (ids) for all system dictionaries
 * @apiName Dictionary list
 * @apiGroup Dictionary
 *
 * @apiParam {Integer} userId  User's ID received in authorization request
 * @apiParam {String} sessionKey  Session key received in authorization request
 *
 * @apiSuccess {Integer} parcelStatuses  The name of current dictionary
 * @apiSuccess {String} itemId  Item id which used in requests
 * @apiSuccess {String} itemName  Item name
 */

public function dictionaryListAction($userId=null, $sessionKey=null)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,apidoc 的注释与 Symfony 中路由的注释相同。

顺便说一下,在生产环境中它工作正常,但在开发环境中我得到了像

[Semantical Error] The annotation "@apiName" in method AppBundle\Controller\Api\apiDictionaryController::dictionaryListAction() was never imported.
Run Code Online (Sandbox Code Playgroud)

有什么办法可以解决这个问题并告诉 Symfony 必须忽略 apidoc 的注释?

Mat*_*teo 2

您可以使用IgnoreAnnotation注释告诉 Docrine 注释阅读器在控制器中跳过此注释。为此,只需将注释添加@IgnoreAnnotation("Annotation")到类的类文档注释中即可。

在你的情况下:

/**
 * @IgnoreAnnotation("apiName")
 * @IgnoreAnnotation("apiGroup")
 * @IgnoreAnnotation("apiParam")
 * @IgnoreAnnotation("apiSuccess")
 */
class ActionController extends Controller


/**
 * @Route("/api/dictionary_list/{userId}/{sessionKey}", name="api/dictionary_list")
 * @api {get} /api/dictionary_list/{userId}/{sessionKey} 01. Values list (ids) for all system dictionaries
 * @apiName Dictionary list
 * @apiGroup Dictionary
 *
 * @apiParam {Integer} userId  User's ID received in authorization request
 * @apiParam {String} sessionKey  Session key received in authorization request
 *
 * @apiSuccess {Integer} parcelStatuses  The name of current dictionary
 * @apiSuccess {String} itemId  Item id which used in requests
 * @apiSuccess {String} itemName  Item name
 */

public function dictionaryListAction($userId=null, $sessionKey=null)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

您还可以考虑向学说/注释项目打开一个 PR ,以将此注释作为默认跳过的注释包含在内

希望这有帮助。