Исправлена ​​ошибка подсказки типа, выдаваемая PHPStan в UserInterface в проекте SymfonyPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Исправлена ​​ошибка подсказки типа, выдаваемая PHPStan в UserInterface в проекте Symfony

Сообщение Anonymous »

Я недавно начал использовать PHPStan (версия 0.12.19) в проекте Symfony 3.4, но получаю ошибку, которую, кажется, должно было быть легко устранить, но я изо всех сил пытаюсь понять.

В настоящее время работает на уровне 7. Вот ошибка, которую я получаю при запуске:

Код: Выделить всё

vendor/bin/phpstan analyse

Код: Выделить всё

------ --------------------------------------------------------------------------------------------------------------
Line   src/AppBundle/Controller/MapController.php
------ --------------------------------------------------------------------------------------------------------------
94     Parameter #1 $user of static method AppBundle\Entity\MapMarker::createMapMarker() expects
Symfony\Component\Security\Core\User\UserInterface, object given.
Это важные части MapController.php:

Код: Выделить всё

    $user = $this->getUser();

$mapMarker = MapMarker::createMapMarker(
$user,
$latitude,
$longitude
);
Метод getUser принадлежит Symfony, поэтому я не могу изменить эту часть: https://github.com/symfony/symfony/blob ... t.php#L444:

Код: Выделить всё

/**
* Get a user from the Security Token Storage.
*
* @return UserInterface|object|null
*
* @throws \LogicException If SecurityBundle is not available
*
* @see TokenInterface::getUser()
*
* @final since version 3.4
*/
protected function getUser()
{
if (!$this->container->has('security.token_storage')) {
throw new \LogicException('The SecurityBundle is not registered in your application. Try running "composer require symfony/security-bundle".');
}

if (null === $token = $this->container->get('security.token_storage')->getToken()) {
return null;
}

if (!\is_object($user = $token->getUser())) {
// e.g. anonymous authentication
return null;
}

return $user;
}
И важные части MapMarker.php:

Код: Выделить всё

/**
* @param UserInterface $user
* @param double $latitude
* @param double $longitude
*/
private function __construct(UserInterface $user, $latitude, $longitude) {
$this->createdBy = $user;
$this->latitude = $latitude;
$this->longitude = $longitude;
}

/**
* @param UserInterface $user
* @param double $latitude
* @param double $longitude
* @return MapMarker
*/
public static function createMapMarker(UserInterface $user, $latitude, $longitude): MapMarker
{
return new self($user, $latitude, $longitude);
}
Когда я выгружаю $user экземпляр UserInterface, он возвращает true — насколько я могу судить, он передает объект UserInterface, а не просто «объект», как указывает PHPStan.

И, наконец, вот мой файл конфигурации phpstan.neon:

Код: Выделить всё

parameters:
level: 7
paths:
- src
- tests
checkGenericClassInNonGenericObjectType: false
checkMissingIterableValueType: false
Чего мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/614 ... ny-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»