Kategorie: PHP

Co je šeptem to je ...

Pro psaní kódu používám PhpStorm. Nepovažuji se za programátora. Jsem spíš nadšený amatérský ťukač kódu. Co potřebuju, to si napíšu a nějak to funguje. PhpPStorm je naprosto špičkový nástroj. Jen v Latte šablonách nějak neumí dobře našeptávat u proměnných, které mu posílám z presenteru. Co s tím?

Š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.

Našeptávání

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č metod

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í.

Chyba v našeptávači

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:

Varování

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:

Laděnka

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ů:

Laděnka

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:

Našeptávač

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:

Našeptávač metod 

Kdo jednou zkusí, už nechce jinak.

Tak to je pro dnes všechno a užij si šeptandu s PhpStormem.

Komentáře

Přidat komentář

O mně

Jmenuji se Rudolf Svátek - lektor výpočetní techniky, trochu PHP programátor a SEO konzultant na volné noze.

Adresa

Příčná 326/3
736 01 Havířov

Kontakty

Email: office@rudolfsvatek.cz
Telefon: +420 777 828 353
Skype: svatekr