Latte: πώς να χρησιμοποιήσετε το σύστημα τύπων;
Σύστημα τύπων. Ένα βασικό ζήτημα για την ανάπτυξη στιβαρών εφαρμογών, στο οποίο η PHP έχει αποκτήσει μεγάλο προβάδισμα έναντι δυναμικών γλωσσών όπως η Python, η Ruby ή η JavaScript. Το Nette Framework καθοδηγεί τους προγραμματιστές προς τον τυποποιημένο και αυστηρό προγραμματισμό από την αρχή. Το Latte 2.7 έφερε υποστήριξη τύπων και στα templates.

Γνωρίζοντας τον τύπο δεδομένων ή αντικειμένου σε κάθε μεταβλητή, μπορούμε:
- Το IDE να παρέχει σωστή αυτόματη συμπλήρωση
- Η στατική ανάλυση να εντοπίζει σφάλματα
Δύο σημεία που βελτιώνουν θεμελιωδώς την ποιότητα και την ευκολία της ανάπτυξης.
Πώς να δηλώσετε τύπους στην πλευρά της PHP;
Θα περάσουμε δεδομένα στο template ως αντικείμενο μιας κλάσης που ορίζει όλες τις μεταβλητές και τους τύπους τους. Χρησιμοποιώντας τα νέα χαρακτηριστικά της PHP 7.4, θα μπορούσε να μοιάζει κάπως έτσι:
class MailTemplate
{
public string $lang = 'cs';
public Address $address;
public string $subject;
public ?float $price = null;
}
Χρήση:
$template = new MailTemplate;
$template->price = $this->getPrice();
...
$latte->render('mail.latte', $template);
Ενημέρωση: χάρη στα νέα χαρακτηριστικά της PHP 8, το παράδειγμα μπορεί να γραφτεί ακόμα πιο ενδιαφέροντα ως εξής:
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,
));
Πώς να δηλώσετε τύπους στο template;
Μπορούμε τώρα να συνδέσουμε την παραπάνω κλάση με το template. Αρκεί να το δηλώσουμε στην αρχή:
{templateType MailTemplate}
Και με αυτό, ορίσαμε ότι το template θα έχει
τέσσερις μεταβλητές $lang
, $address
,
$subject
και $price
συμπεριλαμβανομένων των αντίστοιχων
τύπων τους.
Μια εναλλακτική είναι να ορίσουμε τους
τύπους των μεμονωμένων μεταβλητών
απευθείας στο template, δηλαδή χωρίς να
δημιουργήσουμε μια κλάση. Για αυτό
χρησιμοποιείται το tag {varType}
:
{varType string $lang}
{varType Address $address}
Φυσικά, και τα δύο μπορούν να συνδυαστούν.
Δημιουργήστε μια κλάση, καθώς αυτό
διασφαλίζει την αυτόματη συμπλήρωση στην
πλευρά του presenter, συνδέστε την με το template
χρησιμοποιώντας το {templateType}
και
χρησιμοποιήστε το {varType}
για άλλες
τοπικές μεταβλητές σε μπλοκ κ.λπ. Μπορούμε
να το θεωρήσουμε ως ανάλογο του
/** @var type $variable */
, το οποίο είναι ένα
σχόλιο που μερικές φορές χρησιμοποιούμε
στον κώδικα PHP για να καθοδηγήσουμε το IDE ή
τον στατικό αναλυτή.
Ο τύπος μπορεί τώρα να δηλωθεί και στα tags
{var}
, {default}
ή {define}
:
{var Model\Page $page = $items['page']}
{define form, string $name}
...
{/define}
Σημείωση: για ιστορικούς λόγους, ήταν
δυνατό να γράφονται μεταβλητές στα tags
{var}
και {default}
χωρίς το αρχικό
σύμβολο του δολαρίου (και με βέλος αντί για
ίσον). Επειδή αυτό δημιουργεί αμφισημία ως
προς το αν πρόκειται για τύπο ή μεταβλητή,
αυτή η σύνταξη είναι απαγορευμένη και το Latte
θα σας προειδοποιήσει αν τη
χρησιμοποιήσετε. Ένας απλός τρόπος για να
ελέγξετε τα templates σας για αυτήν την παλιά
σύνταξη είναι να αναζητήσετε τις κανονικές
εκφράσεις /\{(var|default) [^$]/
και
/\{(var|default) [^}]*=>/
.
Πώς να εξοικονομήσετε δουλειά;
Ποιος είναι ο ευκολότερος τρόπος για να
γράψετε μια κλάση template ή τα tags {varType}
;
Αφήστε τα να δημιουργηθούν αυτόματα. Γι'
αυτό ακριβώς υπάρχουν τα δύο tags
{templatePrint}
και {varPrint}
.
Αν τοποθετήσετε ένα από αυτά τα tags σε ένα
template, αντί για την κανονική απόδοση, θα
εμφανιστεί μια πρόταση κώδικα για την κλάση
ή μια λίστα με τα tags {varPrint}
αντίστοιχα. Στη συνέχεια, μπορείτε απλά να
επιλέξετε τον κώδικα με ένα κλικ και να τον
αντιγράψετε στο έργο σας.
Το nette/application
3.1 (σε έκδοση beta)
περιλαμβάνει ένα υπερφορτωμένο tag
{templatePrint}
που παράγει κώδικα καλύτερα
προσαρμοσμένο για presenters.
Το tag {varPrint}
εμφανίζει τοπικές
μεταβλητές που δεν είναι παράμετροι του
template. Αν θέλετε να εμφανίσετε όλες τις
μεταβλητές, χρησιμοποιήστε το
{varPrint all}
.
Αυτόματη συμπλήρωση στο IDE
Η τελευταία έκδοση του Latte plugin για το PhpStorm
μπορεί να χρησιμοποιήσει τα παραπάνω tags και
στη συνέχεια να παρέχει αυτόματη
συμπλήρωση βάσει τύπων. Το plugin γνωρίζει
επίσης τους τύπους των τυπικών μεταβλητών
όπως $user
, $presenter
,
$basePath
κ.λπ.

Στατική ανάλυση
Ο στόχος είναι όλοι οι δηλωμένοι τύποι να μπορούν να χρησιμοποιηθούν και για στατική ανάλυση. Για παράδειγμα, ώστε με τη χρήση του PHPStan να είναι δυνατός ο έλεγχος των templates τόσο εύκολα όσο και άλλων αρχείων PHP.
Δουλεύουμε πάνω σε αυτό και θα το δείτε σε κάποια από τις επόμενες εκδόσεις του Latte.
Για να υποβάλετε ένα σχόλιο, συνδεθείτε