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()
(以及更多功能)中获取正确的信息。
我发现为变量类型添加注解是不必要的,只会弄乱源代码。
一般来说,要让 PhpStorm 找到 classes、方法等,您必须在项目中包含 TYPO3 源代码。
- 您可以创建一个 PHP 项目,其中包含您的整个 Web 根目录(通常是 "public" 文件夹),但不包括 filadmin、uploads、typo3temp 等目录。排除这些目录很重要,因此PhpStorm 不会不必要地扫描它们。 (特别是如果你 运行 核心功能测试,这是非常推荐的。)我发现这是最实用的方法,对调试和核心开发也很有用
- 您可以为您的扩展创建一个 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。
例如
$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()
(以及更多功能)中获取正确的信息。
我发现为变量类型添加注解是不必要的,只会弄乱源代码。
一般来说,要让 PhpStorm 找到 classes、方法等,您必须在项目中包含 TYPO3 源代码。
- 您可以创建一个 PHP 项目,其中包含您的整个 Web 根目录(通常是 "public" 文件夹),但不包括 filadmin、uploads、typo3temp 等目录。排除这些目录很重要,因此PhpStorm 不会不必要地扫描它们。 (特别是如果你 运行 核心功能测试,这是非常推荐的。)我发现这是最实用的方法,对调试和核心开发也很有用
- 您可以为您的扩展创建一个 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。