phpstan / phpstan-symfony
Symfony 框架扩展和 PHPStan 规则
Requires
- php: ^7.2 || ^8.0
- ext-simplexml: *
- phpstan/phpstan: ^1.12
Requires (Dev)
- nikic/php-parser: ^4.13.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpstan-phpunit: ^1.3.11
- phpstan/phpstan-strict-rules: ^1.5.1
- phpunit/phpunit: ^8.5.29 || ^9.5
- psr/container: 1.0 || 1.1.1
- symfony/config: ^5.4 || ^6.1
- symfony/console: ^5.4 || ^6.1
- symfony/dependency-injection: ^5.4 || ^6.1
- symfony/form: ^5.4 || ^6.1
- symfony/framework-bundle: ^5.4 || ^6.1
- symfony/http-foundation: ^5.4 || ^6.1
- symfony/messenger: ^5.4
- symfony/polyfill-php80: ^1.24
- symfony/serializer: ^5.4
- symfony/service-contracts: ^2.2.0
Conflicts
- symfony/framework-bundle: <3.0
- 2.0.x-dev
- 1.4.x-dev
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.x-dev
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.x-dev
- 1.2.25
- 1.2.24
- 1.2.23
- 1.2.22
- 1.2.21
- 1.2.20
- 1.2.19
- 1.2.18
- 1.2.17
- 1.2.16
- 1.2.15
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.12.44
- 0.12.43
- 0.12.42
- 0.12.41
- 0.12.40
- 0.12.39
- 0.12.38
- 0.12.37
- 0.12.36
- 0.12.35
- 0.12.34
- 0.12.33
- 0.12.32
- 0.12.31
- 0.12.30
- 0.12.29
- 0.12.28
- 0.12.27
- 0.12.26
- 0.12.25
- 0.12.24
- 0.12.23
- 0.12.22
- 0.12.21
- 0.12.20
- 0.12.19
- 0.12.18
- 0.12.17
- 0.12.16
- 0.12.15
- 0.12.14
- 0.12.13
- 0.12.12
- 0.12.11
- 0.12.10
- 0.12.9
- 0.12.8
- 0.12.7
- 0.12.6
- 0.12.5
- 0.12.4
- 0.12.3
- 0.12.2
- 0.12.1
- 0.12.0
- 0.11.6
- 0.11.5
- 0.11.4
- 0.11.3
- 0.11.2
- 0.11.1
- 0.11
- 0.10.2
- 0.10.1
- 0.10
- dev-renovate/major-root-composer
- dev-renovate/major-github-actions
- dev-renovate/root-composer
- dev-hepisec-patch-1
- dev-updates
- dev-commands
This package is auto-updated.
Last update: 2024-09-13 12:54:31 UTC
README
此扩展提供以下功能
- 为
ContainerInterface::get()
和::has()
方法提供正确的返回类型。 - 为
Controller::get()
和::has()
方法提供正确的返回类型。 - 为
AbstractController::get()
和::has()
方法提供正确的返回类型。 - 为
ContainerInterface::getParameter()
和::hasParameter()
方法提供正确的返回类型。 - 为
ParameterBagInterface::get()
和::has()
方法提供正确的返回类型。 - 为
Controller::getParameter()
方法提供正确的返回类型。 - 为
AbstractController::getParameter()
方法提供正确的返回类型。 - 基于
$asResource
参数为Request::getContent()
方法提供正确的返回类型。 - 基于
$first
参数为HeaderBag::get()
方法提供正确的返回类型。 - 基于
$stampFqcn
参数为Envelope::all()
方法提供正确的返回类型。 - 基于
$default
参数为InputBag::get()
方法提供正确的返回类型。 - 基于
$key
参数为InputBag::all()
方法提供正确的返回类型。 - 为
TreeBuilder
和NodeDefinition
对象提供正确的返回类型。 - 当你尝试从容器中获取未注册的服务时,会通知你。
- 当你尝试从容器中获取私有服务时,会通知你。
- 可选地纠正
InputInterface::getArgument()
、::getOption
、::hasArgument
和::hasOption
的返回类型。
安装
要使用此扩展,请在 Composer 中要求它
composer require --dev phpstan/phpstan-symfony
如果你还安装了 phpstan/extension-installer,那么你就可以开始了!
手动安装
如果你不想使用 phpstan/extension-installer
,请将 extension.neon 包含在你的项目的 PHPStan 配置中
includes:
- vendor/phpstan/phpstan-symfony/extension.neon
为了执行框架特定的检查,请还包含此文件
includes:
- vendor/phpstan/phpstan-symfony/rules.neon
配置
你必须提供一个指向 srcDevDebugProjectContainer.xml
或类似 XML 文件(描述你的容器)的路径。
parameters: symfony: containerXmlPath: var/cache/dev/srcDevDebugProjectContainer.xml # or with Symfony 4.2+ containerXmlPath: var/cache/dev/srcApp_KernelDevDebugContainer.xml # or with Symfony 5+ containerXmlPath: var/cache/dev/App_KernelDevDebugContainer.xml # If you're using PHP config files for Symfony 5.3+, you also need this for auto-loading of `Symfony\Config`: scanDirectories: - var/cache/dev/Symfony/Config # If you're using PHP config files (including the ones under packages/*.php) for Symfony 5.3+, # you need this to load the helper functions (i.e. service(), env()): scanFiles: - vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php
常量 hassers
有时,当你处理可选依赖项时,::has()
方法可能会引起问题。例如,以下结构会抱怨条件总是要么开启要么关闭,这取决于你是否安装了 service
依赖项。
if ($this->has('service')) { // ... }
在这种情况下,你可以像这样禁用 ::has()
方法返回类型解析
parameters:
symfony:
constantHassers: false
请注意,这可能会隐藏应用程序中的真正错误。
Symfony 命令行分析
通过提供您的应用程序的命令行应用程序,您可以选择更深入地分析 Symfony 命令行命令。这将允许在访问 $input->getArgument()
或 $input->getOption()
时推断正确的参数和选项类型。
parameters: symfony: consoleApplicationLoader: tests/console-application.php
Symfony 4
// tests/console-application.php use App\Kernel; use Symfony\Bundle\FrameworkBundle\Console\Application; require __DIR__ . '/../config/bootstrap.php'; $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); return new Application($kernel);
Symfony 5
// tests/console-application.php use App\Kernel; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Dotenv\Dotenv; require __DIR__ . '/../vendor/autoload.php'; (new Dotenv())->bootEnv(__DIR__ . '/../.env'); $kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); return new Application($kernel);
// tests/console-application.php use App\Application; // where Application extends Symfony\Component\Console\SingleCommandApplication use Symfony\Component\Console; require __DIR__ . '/../vendor/autoload.php'; $application = new Console\Application(); $application->add(new Application()); return $application;
然后您可能会遇到 PhpParser 错误
编译错误:无法声明接口 PhpParser\NodeVisitor,因为该名称已被使用
如果是这种情况,您应该为您的应用程序创建一个新的环境,该环境将禁用内联。在 config/packages/phpstan_env/parameters.yaml
parameters: container.dumper.inline_class_loader: false
在您的 console-application.php
中调用新的 env
$kernel = new \App\Kernel('phpstan_env', (bool) $_SERVER['APP_DEBUG']);