saschaegerer / phpstan-typo3
PHPStan 的 TYPO3 CMS 类反射扩展
Requires
- php: ^7.4 || ^8.0
- ext-simplexml: *
- bnf/phpstan-psr-container: ^1.0
- composer/semver: ^3.3
- phpstan/phpstan: ^1.10.9
- ssch/typo3-debug-dump-pass: ^0.0.2
- typo3/cms-core: ^11.5 || ^12.4 || ^13.0
- typo3/cms-extbase: ^11.5 || ^12.4 || ^13.0
Requires (Dev)
- consistence-community/coding-standard: ^3.10
- dealerdirect/phpcodesniffer-composer-installer: ^1.0
- nikic/php-parser: ^v4.19.1
- phing/phing: ^2.17
- php-parallel-lint/php-parallel-lint: ^1.4
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^9.6
- symfony/polyfill-php80: ^1.29
- dev-master
- 1.10.2
- 1.10.1
- 1.10.0
- 1.9.1
- 1.9.0
- 1.8.9
- 1.8.5
- 1.8.4
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 0.13.3
- 0.13.1
- 0.13.0
- 0.12.3
- 0.12.2
- 0.12.1
- 0.12.0
- 0.11.0
- 0.10.1
- 0.10.0
- dev-bugfix/fix-query-execute-return-type
- dev-phpstan-1.11
- dev-issue-156
- dev-add-typo3-13_1-support
- dev-remove-object-manager-type-extension
- dev-add-type-declarations
- dev-feature/do-not-try-to-find-model-for-abstract-repository
- dev-issue-138
- dev-remove-branch-alias
- dev-issue-111
- dev-feature/drop-php-7-support
- dev-issue-125
- dev-bugfix/fix-fatal-in-queryinterface-d-r-t
- dev-feauture/114
- dev-issue/103-2
- dev-issue/103
- dev-feature/fix-condition
- dev-feature/fix-configurations
- dev-fixDynamicReturnTypeOfRepositoryFindAll
This package is auto-updated.
Last update: 2024-08-26 20:39:35 UTC
README
PHPStan 的 TYPO3 CMS 类反射扩展和框架特定规则。
此扩展提供了以下功能(!!!非详尽列表!!!)
动态返回类型扩展
- 为
\TYPO3\CMS\Core\Context\Context->getAspect()
提供正确的返回类型。 - 为
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance()
提供正确的返回类型。 - 为
\TYPO3\CMS\Extbase\Object\ObjectManagerInterface->get()
提供正确的返回类型。 - 为
\TYPO3\CMS\Extbase\Object\ObjectManager->get()
提供正确的返回类型。 - 为
\TYPO3\CMS\Extbase\Property\PropertyMapper->convert()
提供正确的返回类型。 - 为
\TYPO3\CMS\Core\Utility\MathUtility
方法,如 isIntegerInRange,提供正确的返回类型。 - 为
\TYPO3\CMS\Extbase\Persistence\Generic\Query->execute()
提供正确的返回类型。 - 为
\TYPO3\CMS\Extbase\Persistence\QueryInterface->execute()
提供正确的返回类型。 - 为
\TYPO3\CMS\Core\Site\Entity\Site->getAttribute()
提供正确的返回类型。 - 为
\Psr\Http\Message\ServerRequestInterface->getAttribute()
提供正确的返回类型。 - 底层使用 bnf/phpstan-psr-container
所有这些动态返回类型扩展都是必要的,以便教 PHPStan 什么类型会由特定的方法调用返回。
展示一个实际用法。
例如,PHPStan 无法天生知道如果你调用 `\TYPO3\CMS\Core\Utility\MathUtility->forceIntegerInRange(1000, 1, 10)` 将返回什么类型。它将是一个 int<10>。借助这个库,PHPStan 也知道结果类型。想象以下情况在你的代码中
use TYPO3\CMS\Core\Utility\MathUtility; $integer = MathUtility::forceIntegerInRange(100, 1, 10); if($integer > 10) { throw new \UnexpectedValueException('The integer is too big') }
PHPStan 会告诉你 if 条件是多余的,因为变量 $integer 永远不会大于 10。对吗?
框架特定规则
- 为
\TYPO3\CMS\Core\Context\Context->getAspect()
提供规则。 - 为
\Psr\Http\Message\ServerRequestInterface->getAttribute()
提供规则。 - 为
\TYPO3\CMS\Core\Site\Entity\Site->getAttribute()
提供规则。 - 为
\TYPO3\CMS\Extbase\Validation\ValidatorResolver->createValidator()
提供规则。
展示一个实际用法。
例如,PHPStan 无法天生知道调用 ValidatorResolver->createValidator(RegularExpressionValidator::class)
是无效的,因为我们没有传递必要的选项 regularExpression
。借助这个库,PHPStan 现在会抱怨我们遗漏了必要的选项。所以继续前进,在运行代码之前找到代码中的错误。
安装与配置
要使用此扩展,请在 Composer 中要求它
composer require --dev saschaegerer/phpstan-typo3
如果你还安装了 phpstan/extension-installer,那么你一切都准备好了!
手动安装
如果你不想使用 phpstan/extension-installer
,请将以下内容放入你的 phpstan.neon 配置中
includes: - vendor/saschaegerer/phpstan-typo3/extension.neon
自定义上下文 API 方面
如果你使用自定义的 TYPO3 上下文 API 方面,可以添加映射,让 PHPStan 知道上下文 API 返回什么类型的方面类。
parameters: typo3: contextApiGetAspectMapping: myCustomAspect: FlowdGmbh\MyProject\Context\MyCustomAspect
// PHPStan will now know that $myCustomAspect is of type FlowdGmbh\MyProject\Context\MyCustomAspect $myCustomAspect = GeneralUtility::makeInstance(Context::class)->getAspect('myCustomAspect');
自定义请求属性
如果你使用自定义的 PSR-7 请求属性,可以添加映射,让 PHPStan 知道 Request::getAttribute() 返回什么类型的类。
parameters: typo3: requestGetAttributeMapping: myAttribute: FlowdGmbh\MyProject\Http\MyAttribute myNullableAttribute: FlowdGmbh\MyProject\Http\MyAttribute|null
// PHPStan will now know that $myAttribute is of type FlowdGmbh\MyProject\Http\MyAttribute $myAttribute = $request->getAttribute('myAttribute');
自定义站点属性
如果您在TYPO3 Site API中使用自定义属性,您可以添加映射,这样PHPStan就会知道由网站API返回的类型是什么。
parameters: typo3: siteGetAttributeMapping: myArrayAttribute: array myIntAttribute: int myStringAttribute: string
$site = $this->request->getAttribute('site'); // PHPStan will now know that $myArrayAttribute is of type array<mixed, mixed> $myArrayAttribute = $site->getAttribute('myArrayAttribute'); // PHPStan will now know that $myIntAttribute is of type int $myIntAttribute = $site->getAttribute('myIntAttribute'); // PHPStan will now know that $myStringAttribute is of type string $myStringAttribute = $site->getAttribute('myStringAttribute');
检查私有服务
您必须提供App_KernelDevelopmentDebugContainer.xml或类似XML文件的路径,该文件描述了您的容器。这是由ssch/typo3-debug-dump-pass生成的,位于您的/var/cache/{TYPO3_CONTEXT}/文件夹中。
parameters: typo3: containerXmlPath: var/cache/development/App_KernelDevelopmentDebugContainer.xml