Típusrendszer
A típusrendszer kulcsfontosságú a robusztus alkalmazások fejlesztéséhez. A Latte a sablonokba is bevezeti a típusok támogatását. Annak köszönhetően, hogy tudjuk, milyen adat- vagy objektumtípus van minden változóban,
- az IDE helyesen tud súgni (lásd integráció)
- a statikus analízis felfedheti a hibákat
Mindkettő alapvetően növeli a fejlesztés minőségét és kényelmét.
A deklarált típusok informatívak, és a Latte jelenleg nem ellenőrzi őket.
Hogyan kezdjük el használni a típusokat? Hozzon létre egy sablonosztályt, pl. CatalogTemplateParameters
,
amely reprezentálja az átadott paramétereket, azok típusait és esetleg alapértelmezett értékeit:
class CatalogTemplateParameters
{
public function __construct(
public string $langs,
/** @var ProductEntity[] */
public array $products,
public Address $address,
) {}
}
$latte->render('template.latte', new CatalogTemplateParameters(
address: $userAddress,
lang: $settings->getLanguage(),
products: $entityManager->getRepository('Product')->findAll(),
));
Ezután a sablon elejére illessze be a {templateType}
taget az osztály teljes nevével (beleértve a névteret
is). Ez definiálja, hogy a sablonban a $langs
és $products
változók a megfelelő típusokkal együtt
léteznek. A lokális változók típusait a {var}
,
{varType}
, {define}
tagekkel
adhatja meg.
Ettől kezdve az IDE helyesen tud súgni.
Hogyan spórolhatunk munkát? Hogyan írhatjuk le a legegyszerűbben a sablonparaméterekkel rendelkező osztályt vagy a
{varType}
tageket? Hagyjuk, hogy legenerálódjanak. Erre létezik a {templatePrint}
és
{varPrint}
tagpár. Ha ezeket elhelyezi a sablonban, a szokásos renderelés helyett az osztály kódjának
javaslata, illetve a {varType}
tagek listája jelenik meg. A kódot ezután elég egy kattintással kijelölni és a
projektbe másolni.
{templateType}
A sablonba átadott paraméterek típusait egy osztály segítségével deklaráljuk:
{templateType MyApp\CatalogTemplateParameters}
{varType}
Hogyan deklaráljuk a változók típusait? Erre szolgálnak a {varType}
tagek a meglévő változókhoz, vagy a
{var}
:
{varType Nette\Security\User $user}
{varType string $lang}
{templatePrint}
Az osztályt a {templatePrint}
tag segítségével is legeneráltathatja. Ha ezt a sablon elejére helyezi, a
szokásos renderelés helyett az osztály javaslata jelenik meg. A kódot ezután elég egy kattintással kijelölni és a
projektbe másolni.
{varPrint}
A {varPrint}
tag időt takarít meg az írással. Ha ezt a sablonba helyezi, a szokásos renderelés helyett a
lokális változókhoz tartozó {varType}
tagek javaslata jelenik meg. A kódot ezután elég egy kattintással
kijelölni és a sablonba másolni.
Maga a {varPrint}
csak a lokális változókat írja ki, amelyek nem sablonparaméterek. Ha az összes változót
ki szeretné írni, használja a {varPrint all}
-t.