PHPstan Access to an undefined property Nette\Security\IIdentity:
- MKI-Miro
- Člen | 279
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
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)