TYPO3 queryBuilder,如何让PhpStorm识别方法?

TYPO3 queryBuilder, how to let PhpStorm recognise methods?

例如

        $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
        $queryBuilder = $connectionPool->getQueryBuilderForTable($table);

        $statement = $queryBuilder
            ->select('uid')
            ->from($table)
            ->orderBy('start_date', 'DESC')
            ->where(
                $queryBuilder->expr()->lte('start_date', $queryBuilder->createNamedParameter($startDate, \PDO::PARAM_INT)),
                $queryBuilder->expr()->neq('uid', $queryBuilder->createNamedParameter($currentUid, \PDO::PARAM_INT))
            )
            ->setMaxResults(1)
            ->execute();
        while ($row = $statement->fetch()) {
            $prevs[] = $row;
        }

如何让 PhpStorm 识别方法 select、expr、createNamedParameter、fetch 等

PhpStorm 不会自动知道 class $connectionPool 是什么,因此无法知道 class 派生的所有内容。您可以通过添加注释来告诉 PhpStorm class $connectionPool 是什么:

/** @var ConnectionPool $connectionPool */
$connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);

您可以执行 2 个步骤来帮助 PhpStorm 识别项目外的函数:

用各自的命名空间注释变量:

/** @var $queryBuilder \TYPO3\CMS\Core\Database\Query\QueryBuilder **/
$queryBuilder = $connectionPool->getQueryBuilderForTable($table);

多次使用时可以通过声明缩短以上内容:

use \TYPO3\CMS\Core\Database\Query\QueryBuilder;

在文件的顶部,您只需要

/** @var $queryBuilder QueryBuilder **/

作为第二步 include 将 Typo3 源添加到您的项目(如果它们尚未包含在您的项目文件中)以便 PhpStorm 能够为它们编制索引

如果您使用 PhpStorm 的 TYPO3 插件,它能够从 makeInstance()(以及更多功能)中获取正确的信息。

https://plugins.jetbrains.com/plugin/9496-typo3-cms-plugin

我发现为变量类型添加注解是不必要的,只会弄乱源代码。

一般来说,要让 PhpStorm 找到 classes、方法等,您必须在项目中包含 TYPO3 源代码。

  1. 您可以创建一个 PHP 项目,其中包含您的整个 Web 根目录(通常是 "public" 文件夹),但不包括 filadmin、uploads、typo3temp 等目录。排除这些目录很重要,因此PhpStorm 不会不必要地扫描它们。 (特别是如果你 运行 核心功能测试,这是非常推荐的。)我发现这是最实用的方法,对调试和核心开发也很有用
  2. 您可以为您的扩展创建一个 PhpStorm 项目并包含您的 TYPO3 源代码。我不知道这个,但应该是可能的。

执行此操作并且 PhpStorm 扫描了您的文件后,应该可以执行以下任一操作:

  • 自动扩展 class 和函数名称
  • 自动添加 use 语句(有关更多信息,请参阅 PhpStorm help
  • 等等

另请参阅 DynamicReturnType 插件,核心附带的 other plugins recommended for TYPO3 core development. The DynamicReturnType plugin along with the file dynamicReturnTypeMeta.json 应该为 PhpStorm 提供足够的信息,例如使用 makeInstance 实例化的 class 类型的 classes。