Latte : qu'en est-il du système de types ?
Le système de types. Un élément clé pour le développement d'applications robustes, dans lequel PHP a pris une avance considérable sur les langages dynamiques tels que Python, Ruby ou JavaScript. Dès le début, le framework Nette a guidé les programmeurs vers une programmation typée et stricte. Latte 2.7 a apporté la prise en charge des types également dans les templates.

Grâce au fait que nous savons quel type de données ou d'objet se trouve dans chaque variable,
- l'IDE peut correctement suggérer
- l'analyse statique peut détecter les erreurs
Deux points qui améliorent considérablement la qualité et le confort du développement.
Comment déclarer les types côté PHP ?
Nous transmettrons les données au template sous forme d'objet d'une classe qui définit toutes les variables et leurs types. En utilisant les nouvelles fonctionnalités de PHP 7.4, cela pourrait ressembler à ceci :
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Utilisation :
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Complément : grâce aux nouvelles fonctionnalités de PHP 8, l'exemple peut être écrit de manière encore plus intéressante comme ceci :
class MailTemplate
{
public function __construct(
public string $lang = 'cs',
public Address $address,
public string $subject,
public ?float $price = null,
) {}
}
$latte->render('mail.latte', new MailTemplate(
lang: $this->lang,
subject: $title,
price: $this->getPrice(),
address: $userAddress,
));
Comment déclarer les types dans le template ?
Nous pouvons maintenant lier la classe mentionnée au template. Il suffit d'indiquer au début :
{templateType MailTemplate}
Et nous avons ainsi défini que dans le template, il y aura quatre variables
$lang
, $address
, $subject
et
$price
avec leurs types respectifs.
Une alternative consiste à définir les types des variables individuelles
directement dans le template, c'est-à-dire sans créer de classe. La balise
{varType}
est utilisée à cet effet :
{varType string $lang}
{varType Address $address}
Bien sûr, les deux peuvent être combinés. Créez une classe, car cela
garantit l'autocomplétion côté presenter, liez-la au template à l'aide de
{templateType}
, et pour les autres variables locales dans les
blocs, etc., utilisez {varType}
. Que nous pouvons considérer comme
l'équivalent de /** @var type $variable */
, qui est un commentaire
que nous utilisons parfois dans le code PHP pour instruire l'IDE ou l'analyseur
statique.
Désormais, le type peut également être indiqué dans les balises
{var}
, {default}
ou {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Note : pour des raisons historiques, il était possible dans les balises
{var}
et {default}
d'écrire des variables sans le
dollar initial (et avec une flèche au lieu d'un signe égal). Comme cela crée
une ambiguïté quant à savoir s'il s'agit d'un type ou d'une variable, cette
syntaxe est obsolète et Latte vous avertira si vous l'utilisez. Un moyen simple
de rechercher dans vos templates si vous avez cette ancienne syntaxe est de
rechercher les expressions régulières /\{(var|default) [^$]/
et
/\{(var|default) [^}]*=>/
.
Comment économiser du travail ?
Quelle est la manière la plus simple d'écrire une classe de template ou des
balises {varType}
? Faites-les générer. C'est précisément à
cela que servent les deux balises {templatePrint}
et
{varPrint}
.
Si vous placez l'une de ces balises dans un template, au lieu du rendu
normal, une proposition de code de classe ou une liste de balises
{varPrint}
sera affichée. Il suffit ensuite de sélectionner le
code d'un simple clic et de le copier dans votre projet.
nette/application 3.1 (en version bêta) inclut une balise
{templatePrint}
surchargée qui génère un code mieux adapté aux
presenters.
La balise {varPrint}
affiche les variables locales qui ne sont
pas des paramètres du template. Si vous souhaitez afficher toutes les
variables, utilisez {varPrint all}
.
Autocomplétion dans l'IDE
La dernière version du plugin Latte pour PhpStorm peut utiliser les balises
mentionnées ci-dessus et ensuite suggérer en fonction des types. Le plugin
connaît également les types des variables standard telles que
$user
, $presenter
, $basePath
, etc.

Analyse statique
L'objectif est que tous les types déclarés puissent également être utilisés pour l'analyse statique. Par exemple, pour pouvoir vérifier les templates avec PHPStan aussi facilement que d'autres fichiers PHP.
Nous y travaillons et vous le verrez dans l'une des prochaines versions de Latte.
Pour soumettre un commentaire, veuillez vous connecter