Latte addFilter a PHPStan level = 2
- motorcb
- Člen | 552
Ahoj,
pokouším se zvednou PHPStan na level 2. Končím ale na
následujícíc chybě:
------ --------------------------------------------------------------------------
Line app\Components\UserDetail\UserDetail.php
------ --------------------------------------------------------------------------
41 Cannot call method getLatte() on Nette\Application\UI\Template|stdClass.
------ --------------------------------------------------------------------------
Jedná se o komponentu, kde používá latte filter:
public function render()
{
$latte = $this->template->getLatte();
$latte->addFilter('anonimize', function (string $text) {
return "xxx";//loginka filtru
});
$this->template->setFile(__DIR__ . '/UserDetail.latte');
$this->template->userRow = $this->userRow;
$this->template->render();
}
Jak to děláte vy aby byl PHPStan spokojený?
Díky
- kminekmatej
- Generous Backer | 38
Také jsem to řešil, problém je že template je v parentu definován jako Nette\Application\UI\Template|stdClass. Stačí před to dát Asserci na správnou classu:
assert($this->template instanceof \Nette\Bridges\ApplicationLatte\Template);
- Marek Bartoš
- Nette Blogger | 1275
Je zbytečné psát všude assert, když nejspíš vždy budeš používat Latte. Stačí do base presenteru přidat anotaci
use Nette\Application\UI\Presenter;
use Nette\Bridges\ApplicationLatte\Template;
use Nette\Bridges\ApplicationLatte\TemplateFactory;
/**
* @property-read Template $template
* @method TemplateFactory getTemplateFactory()
* @method Template createTemplate()
* @method Template getTemplate()
*/
abstract class BasePresenter extends Presenter {}
Editoval Marek Bartoš (30. 12. 2023 15:02)
- Marek Bartoš
- Nette Blogger | 1275
Pokud chceš mít přehled o nových chybách a vidět ty existující, tak
je fajn nastavit PHPStan na level 8 (maximální level 9 je většinou
nereálné splnit) a vygenerovat si baseline
s přehledem existujících chyb.
Nikdy nevyřešíš všechny chyby. Kupříkladu u Nette formulářů je to
zbytečně komplikované a nedostal by ses tak na vyšší level.