Šeptanda
Našeptávání všeho možného je velmi silná stránka PHPStormu. Vložíš proměnnou, ve které je třeba entita z Doctrine 2, dopíšeš operátor -> a hned se vypíšou její metody nebo vlastnosti. Už si jen vybereš. Máš třeba nějaký repozitář, takže stačí napsat $this->pase a našeptávač nabídne $this->pageSelectFacade. Pak stačí jen stisknout Tabulátor a samo se to dopíše.
Jestliže je v pageSelectFacade mnoho metod a mezi nimi například findPairs(), múžeš napsat třeba jen pa. Našeptávač správně odfiltruje to, co nechceš a zůstane ti tam jen to, cos hledal. Pak opět stačí Tabulátor.
Našeptávač pak radí i s argumenty metod, včetně požadovaných datových typů. Prostě nádhera.
Latte bez cukru?
Jakmile si ale upravuju Latte šablonu, do které si z presenteru předám nějakou proměnnou, tak našeptávač selhává. No, jakože není to žádná hrůza. Prostě se objeví varování, že tu máme neznámou proměnnou. Navíc pro $article (v tomto ilustračním případě) nefunguje našeptávání.
Dá se to buď ignorovat, nebo vypnout v PhpStormu toto varování. Ale je tu i lepší možnost. Zbavíme se chybového hlášení a navíc naučíme PhpStorm našeptávat :-).
Všechno, co posíláš z presenteru do šablony si nejprve deklarujeme zvlášť ve třídě, která rozšiřuje třídu Nette\Bridges\ApplicationLatte\Template. Dejme tomu, že z presenteru BlogPresenter posíláš do šablony 3 proměnné - $article jako ArrayHash, $articles jako array a $myCategory jako entitu Category. Vytvoř tedy třídu BlogTeplate ve stejném namespace jako BlogPresenter. A tady jen deklaruješ proměnné s jejich typem:
<?php
namespace BlogModule\FrontModule\Presenters;
use Nette\Bridges\ApplicationLatte\Template;
use Nette\Utils\ArrayHash;
use CategoryModule\Model\Entity\Category;
class BlogTemplate extends Template
{
public ArrayHash $article;
public array $articles;
public Category $myCategory;
}
Aby presenter věděl, jaké proměnné jsou povolené a co vlastně obsahují, dáš malou anotaci před definici třídy presenteru:
/**
* @property-read BlogTemplate $template
*/
class BlogPresenter extends BasePresenter
{
public ArrayHash $article;
public function actionDefault(int $id): void
{
$this->article = $this->blogSelectFacade->find($id);
}
public function renderDefault(): void
{
$this->template->article = $this->article;
}
}
Od této chvíle presenter nemůže poslat do šablony nic jiného. Když se o to pokusím, dostanu varování v PhpStorm:
A co víc! pokud jedeš na PHP 8.2, zaúřaduje laděnka (nechtěj, abych se učil říkat jí Tracy) s hlášením o dynamických properties:
Celé to jde tak daleko, že se i hlídají datové typy, takže když ve třídě BlogTeplate změním typ proměnné $articles z původního array na ArrayHash, neprojde to také. Tentokrát na neshodu typů:
Prostě teď vzdycky víš, že se do šablony nemůže poslat nic, co neexistuje. A když už něco pošleš, vždycky víš, co v tom je za data.
Můžu ti něco pošeptat?
To je sice pěkné, ale v té Latte šabloně zatím PhpStorm pořád podtrhává chyby a neumí našeptávat. Řešením je vložit jeden řádek hned na začátek šablony:
{templateType BlogModule\FrontModule\Presenters\BlogTemplate}
Od toho okamžiku PhpStorm ví, co která proměnná znamená a dokonce i jakého je typu. A jak má ve zvyku, hned začne šeptat:
Nemůžeme po něm samozřejmě chtít zázraky, jako třeba našeptávání klíčů v proměnných typu array nebo ArraHash. Ovšem pokud pracuje třeba s entitou, začne napovídat její metody a vlastnosti. Deklarovali jsem třeba entitu Category $myCategory. Tak pak to s našeptáváním vypadá takto:
Kdo jednou zkusí, už nechce jinak.
Tak to je pro dnes všechno a užij si šeptandu s PhpStormem.
Komentáře