Korrekter Typhinweisfehler, der von PHPStan auf UserInterface im Symfony-Projekt ausgelöst wurdePhp

PHP-Programmierer chatten hier
Anonymous
 Korrekter Typhinweisfehler, der von PHPStan auf UserInterface im Symfony-Projekt ausgelöst wurde

Post by Anonymous »

Ich habe vor kurzem damit begonnen, PHPStan (Version 0.12.19) in einem Symfony 3.4-Projekt zu verwenden, erhalte jedoch eine Fehlermeldung, die einfach zu beheben sein sollte, aber ich habe Schwierigkeiten, das herauszufinden.

Läuft derzeit auf Stufe 7. Hier ist die Fehlermeldung, die ich bekomme, wenn ich Folgendes ausführe:

Code: Select all

vendor/bin/phpstan analyse

Code: Select all

------ --------------------------------------------------------------------------------------------------------------
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.
Dies sind die wichtigen Teile von MapController.php:

Code: Select all

    $user = $this->getUser();

$mapMarker = MapMarker::createMapMarker(
$user,
$latitude,
$longitude
);
Die getUser-Methode ist die Symfony-Methode, daher kann ich diesen Teil nicht ändern: https://github.com/symfony/symfony/blob ... t.php#L444:

Code: Select all

/**
* 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;
}
Und die wichtigen Teile von MapMarker.php:

Code: Select all

/**
* @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);
}
Wenn ich $user-Instanz von UserInterface ausgibt, wird „true“ zurückgegeben – soweit ich das beurteilen kann, übergibt es ein UserInterface-Objekt und nicht nur ein „Objekt“, wie PHPStan angibt.

Und schließlich ist hier meine phpstan.neon-Konfigurationsdatei:

Code: Select all

parameters:
level: 7
paths:
- src
- tests
checkGenericClassInNonGenericObjectType: false
checkMissingIterableValueType: false
Was habe ich übersehen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post