PHPStan не видит надлежащий ObjectManager для Doctrine

Я пытаюсь улучшить свой код с помощью PHPStan. Я уже установил:

Вот мой phpstan.neon:

includes:
  - vendor/phpstan/phpstan/conf/config.levelmax.neon
  - vendor/phpstan/phpstan-symfony/extension.neon
  - vendor/phpstan/phpstan-doctrine/extension.neon
  - vendor/phpstan/phpstan-doctrine/rules.neon
  - vendor/phpstan/phpstan-phpunit/extension.neon
  - vendor/phpstan/phpstan-phpunit/rules.neon
parameters:
  paths:
    - %currentWorkingDirectory%/src
    - %currentWorkingDirectory%/tests
  symfony:
    container_xml_path: '%currentWorkingDirectory%/var/cache/dev/srcApp_KernelDevDebugContainer.xml'
  autoload_directories:
    - %currentWorkingDirectory%/tests

Также у меня есть тест с вызовом следующих функций:

$kernel = static::bootKernel();
$doctrine = $kernel->getContainer()->get('doctrine');
$doctrine->getManager()->getConfiguration();
$doctrine->getManager()->getEventManager();

И PHPStan жалуются на это:

Call to an undefined method Doctrine\Common\Persistence\ObjectManager::getConfiguration().
Call to an undefined method Doctrine\Common\Persistence\ObjectManager::getEventManager().

Я исследовал это $doctrine->getManager() я имею Doctrine\ORM\EntityManagerInterface которые простираются Doctrine\Common\Persistence\ObjectManager но PHPStan думаю, что у меня есть Doctrine\Common\Persistence\ObjectManager

Как сказать PHPStan, что $doctrine->getManager() является Doctrine\ORM\EntityManagerInterface?

0 ответов

Вы также можете:

  1. добавить встроенный PHPDoc (работает где угодно):
/** @var \Doctrine\ORM\EntityManagerInterface */
$doctrine = $kernel->getContainer()->get('doctrine');
  1. использовать assert (работает только в тестах):
$doctrine = $kernel->getContainer()->get('doctrine');
self::assertInstanceOf(EntityManagerInterface::class, $doctrine);
Другие вопросы по тегам