PHPstan Access to an undefined property Nette\Security\IIdentity:

MKI-Miro
Člen | 279
+
0
-

Ahojte

PHPstan mi hlasi

 121    Access to an undefined property Nette\Security\IIdentity::$firstname.
  122    Access to an undefined property Nette\Security\IIdentity::$lastname.
...

pricom to je takyto kod

$this->template->firstname = $this->user->identity->firstname;
$this->template->lastname = $this->user->identity->lastname;

Ako to opravit resp potlacit tu hlasku?

plus mi hlasi

Call to an undefined method Nette\Application\UI\Template::renderToString()

pre

public function beforeRender()
{
   $this->template->setTranslator($this->translator);

dakujeem

Editoval MKI-Miro (8. 11. 2021 15:51)

Polki
Člen | 553
+
0
-

IIdentity je interface a ty nad ním chceš volat property. To je jasné, že to zahlásí. Takže buď vypnout konkrétní varování podle dokumentace PHP stanu, nebo přistupovat rovnou k datům:

$this->template->firstname = $this->user->identity->getData()['firstname'];
$this->template->lastname = $this->user->identity->getData()['lastname'];

s Nette\Application\UI\Template::renderToString() je to bohužel ten stejný problém, jelikož daný interface už nemá metodu renderToString i když třída, která se díky DI předá ji má. Opět je řešení pro daný řádek vypnout dané pravidlo. Když vypneš tyto dvě věci, v rámci Presenteru, tak ti to stejně vadit asi moc nebude, jelikož Presentery se netestují. :)

EDIT 1:
Alternativně si můžeš ještě udělat něco jako:

public function beforeRender()
{
	assert($this->template instanceof Nette\Bridges\ApplicationLatte\DefaultTemplate);
   	$this->template->setTranslator($this->translator);

a

assert($this->user->identity instanceof Nette\Security\SimpleIdentity);
$this->template->firstname = $this->user->identity->firstname;
$this->template->lastname = $this->user->identity->lastname;

, což by mělo pomoct, ale myslím, že v rámci Presenterů ignoring těchto chyb bohatě stačí :)

Editoval Polki (8. 11. 2021 18:02)