Στοιχεία φόρμας
Επισκόπηση των τυπικών στοιχείων φόρμας.
addText (string|int $name, $label=null, ?int $cols=null, ?int $maxLength=null): TextInput
Προσθέτει ένα πεδίο κειμένου μίας γραμμής (κλάση TextInput). Εάν ο χρήστης δεν
συμπληρώσει το πεδίο, επιστρέφει ένα κενό string ''
, ή με τη χρήση
του setNullable()
μπορεί να οριστεί να επιστρέφει null
.
$form->addText('name', 'Όνομα:')
->setRequired()
->setNullable();
Επικυρώνει αυτόματα το UTF-8, αφαιρεί τα κενά στην αρχή και στο τέλος και αφαιρεί τις αλλαγές γραμμής που θα μπορούσε να στείλει ένας εισβολέας.
Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του
setMaxLength()
. Η τροποποίηση της τιμής που εισήγαγε ο χρήστης είναι
δυνατή με το addFilter().
Με τη χρήση του setHtmlType()
μπορεί να αλλάξει ο οπτικός χαρακτήρας
του πεδίου κειμένου σε τύπους όπως search
, tel
ή url
δείτε τις προδιαγραφές.
Να θυμάστε ότι η αλλαγή τύπου είναι μόνο οπτική και δεν αντικαθιστά τη
λειτουργία επικύρωσης. Για τον τύπο url
είναι σκόπιμο να
προστεθεί ένας συγκεκριμένος κανόνας επικύρωσης URL.
Για άλλους τύπους εισόδου, όπως number
, range
,
email
, date
, datetime-local
, time
και color
,
χρησιμοποιήστε τις εξειδικευμένες μεθόδους όπως addInteger, addFloat, addEmail addDate, addTime, addDateTime και addColor, οι οποίες εξασφαλίζουν την επικύρωση από την πλευρά
του διακομιστή. Οι τύποι month
και week
δεν υποστηρίζονται
ακόμη πλήρως σε όλα τα προγράμματα περιήγησης.
Στο στοιχείο μπορεί να οριστεί η λεγόμενη empty-value, η οποία είναι κάτι
σαν προεπιλεγμένη τιμή, αλλά αν ο χρήστης δεν την αλλάξει, το στοιχείο
επιστρέφει κενό string ή null
.
$form->addText('phone', 'Τηλέφωνο:')
->setHtmlType('tel')
->setEmptyValue('+30');
addTextArea (string|int $name, $label=null): TextArea
Προσθέτει ένα πεδίο για την εισαγωγή κειμένου πολλαπλών γραμμών
(κλάση TextArea). Εάν ο
χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό string ''
, ή με
τη χρήση του setNullable()
μπορεί να οριστεί να επιστρέφει
null
.
$form->addTextArea('note', 'Σημείωση:')
->addRule($form::MaxLength, 'Η σημείωση είναι πολύ μεγάλη', 10000);
Επικυρώνει αυτόματα το UTF-8 και κανονικοποιεί τους διαχωριστές
γραμμών σε \n
. Σε αντίθεση με το πεδίο εισόδου μίας γραμμής, δεν
γίνεται καμία αφαίρεση κενών.
Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του
setMaxLength()
. Η τροποποίηση της τιμής που εισήγαγε ο χρήστης είναι
δυνατή με το addFilter(). Μπορεί
να οριστεί η λεγόμενη empty-value με τη χρήση του setEmptyValue()
.
addInteger (string|int $name, $label=null): TextInput
Προσθέτει ένα πεδίο για την εισαγωγή ακέραιου αριθμού (κλάση TextInput). Επιστρέφει είτε
integer, είτε null
, εάν ο χρήστης δεν εισάγει τίποτα.
$form->addInteger('year', 'Έτος:')
->addRule($form::Range, 'Το έτος πρέπει να είναι στο εύρος από %d έως %d.', [1900, 2023]);
Το στοιχείο αποδίδεται ως <input type="number">
. Με τη χρήση της
μεθόδου setHtmlType()
μπορεί να αλλάξει ο τύπος σε range
για
εμφάνιση με τη μορφή ολισθητήρα, ή σε text
, εάν προτιμάτε ένα
τυπικό πεδίο κειμένου χωρίς την ειδική συμπεριφορά του τύπου
number
.
addFloat (string|int $name, $label=null): TextInput
Προσθέτει ένα πεδίο για την εισαγωγή δεκαδικού αριθμού (κλάση TextInput). Επιστρέφει είτε float,
είτε null
, εάν ο χρήστης δεν εισάγει τίποτα.
$form->addFloat('level', 'Επίπεδο:')
->setDefaultValue(0)
->addRule($form::Range, 'Το επίπεδο πρέπει να είναι στο εύρος από %d έως %d.', [0, 100]);
Το στοιχείο αποδίδεται ως <input type="number">
. Με τη χρήση της
μεθόδου setHtmlType()
μπορεί να αλλάξει ο τύπος σε range
για
εμφάνιση με τη μορφή ολισθητήρα, ή σε text
, εάν προτιμάτε ένα
τυπικό πεδίο κειμένου χωρίς την ειδική συμπεριφορά του τύπου
number
.
Το Nette και ο περιηγητής Chrome αποδέχονται τόσο το κόμμα όσο και την
τελεία ως διαχωριστικό δεκαδικών ψηφίων. Για να είναι διαθέσιμη αυτή η
λειτουργικότητα και στον Firefox, συνιστάται να ορίσετε το χαρακτηριστικό
lang
είτε για το συγκεκριμένο στοιχείο είτε για ολόκληρη τη
σελίδα, για παράδειγμα <html lang="el">
.
addEmail (string|int $name, $label=null, int $maxLength=255): TextInput
Προσθέτει ένα πεδίο για την εισαγωγή διεύθυνσης email (κλάση TextInput). Εάν ο χρήστης δεν
συμπληρώσει το πεδίο, επιστρέφει ένα κενό string ''
, ή με τη χρήση
του setNullable()
μπορεί να οριστεί να επιστρέφει null
.
$form->addEmail('email', 'E-mail:');
Επαληθεύει εάν η τιμή είναι έγκυρη διεύθυνση email. Δεν επαληθεύεται εάν ο τομέας υπάρχει πραγματικά, επαληθεύεται μόνο η σύνταξη. Επικυρώνει αυτόματα το UTF-8, αφαιρεί τα κενά στην αρχή και στο τέλος.
Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του
setMaxLength()
. Η τροποποίηση της τιμής που εισήγαγε ο χρήστης είναι
δυνατή με το addFilter(). Μπορεί
να οριστεί η λεγόμενη empty-value με τη χρήση του setEmptyValue()
.
addPassword (string|int $name, $label=null, ?int $cols=null, ?int $maxLength=null): TextInput
Προσθέτει ένα πεδίο για την εισαγωγή κωδικού πρόσβασης (κλάση TextInput).
$form->addPassword('password', 'Κωδικός πρόσβασης:')
->setRequired()
->addRule($form::MinLength, 'Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον %d χαρακτήρες', 8)
->addRule($form::Pattern, 'Πρέπει να περιέχει αριθμό', '.*[0-9].*');
Κατά την εκ νέου εμφάνιση της φόρμας, το πεδίο θα είναι κενό. Επικυρώνει αυτόματα το UTF-8, αφαιρεί τα κενά στην αρχή και στο τέλος και αφαιρεί τις αλλαγές γραμμής που θα μπορούσε να στείλει ένας εισβολέας.
addCheckbox (string|int $name, $caption=null): Checkbox
Προσθέτει ένα πλαίσιο ελέγχου (κλάση Checkbox). Επιστρέφει την τιμή
είτε true
είτε false
, ανάλογα με το αν είναι επιλεγμένο.
$form->addCheckbox('agree', 'Συμφωνώ με τους όρους')
->setRequired('Είναι απαραίτητο να συμφωνήσετε με τους όρους');
addCheckboxList (string|int $name, $label=null, ?array $items=null): CheckboxList
Προσθέτει πλαίσια ελέγχου για την επιλογή πολλαπλών στοιχείων (κλάση
CheckboxList). Επιστρέφει
έναν πίνακα με τα κλειδιά των επιλεγμένων στοιχείων. Η μέθοδος
getSelectedItems()
επιστρέφει τις τιμές αντί για τα κλειδιά.
$form->addCheckboxList('colors', 'Χρώματα:', [
'r' => 'κόκκινο',
'g' => 'πράσινο',
'b' => 'μπλε',
]);
Τον πίνακα των προσφερόμενων στοιχείων τον παραδίδουμε ως τρίτη
παράμετρο ή με τη μέθοδο setItems()
.
Με τη χρήση του setDisabled(['r', 'g'])
μπορούν να απενεργοποιηθούν
μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι τα επιλεγμένα στοιχεία είναι πράγματι ένα από τα προσφερόμενα και
δεν έχουν απενεργοποιηθεί. Με τη μέθοδο getRawValue()
μπορούν να
ληφθούν τα υποβληθέντα στοιχεία χωρίς αυτόν τον σημαντικό έλεγχο.
Κατά τον ορισμό των προεπιλεγμένων επιλεγμένων στοιχείων, ελέγχει
επίσης ότι είναι ένα από τα προσφερόμενα, διαφορετικά προκαλεί
εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη χρήση του
checkDefaultValue(false)
.
Εάν υποβάλλετε τη φόρμα με τη μέθοδο GET
, μπορείτε να επιλέξετε
έναν πιο συμπαγή τρόπο μετάδοσης δεδομένων, ο οποίος εξοικονομεί
μέγεθος στο query string. Ενεργοποιείται ορίζοντας το HTML attribute της φόρμας:
$form->setHtmlAttribute('data-nette-compact');
addRadioList (string|int $name, $label=null, ?array $items=null): RadioList
Προσθέτει κουμπιά επιλογής (κλάση RadioList). Επιστρέφει το
κλειδί του επιλεγμένου στοιχείου, ή null
, εάν ο χρήστης δεν
επέλεξε τίποτα. Η μέθοδος getSelectedItem()
επιστρέφει την τιμή αντί για
το κλειδί.
$sex = [
'm' => 'άνδρας',
'f' => 'γυναίκα',
];
$form->addRadioList('gender', 'Φύλο:', $sex);
Τον πίνακα των προσφερόμενων στοιχείων τον παραδίδουμε ως τρίτη
παράμετρο ή με τη μέθοδο setItems()
.
Με τη χρήση του setDisabled(['m', 'f'])
μπορούν να απενεργοποιηθούν
μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι το επιλεγμένο στοιχείο είναι πράγματι ένα από τα προσφερόμενα και
δεν έχει απενεργοποιηθεί. Με τη μέθοδο getRawValue()
μπορεί να ληφθεί
το υποβληθέν στοιχείο χωρίς αυτόν τον σημαντικό έλεγχο.
Κατά τον ορισμό του προεπιλεγμένου επιλεγμένου στοιχείου, ελέγχει
επίσης ότι είναι ένα από τα προσφερόμενα, διαφορετικά προκαλεί
εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη χρήση του
checkDefaultValue(false)
.
addSelect (string|int $name, $label=null, ?array $items=null, ?int $size=null): SelectBox
Προσθέτει ένα select box (κλάση SelectBox). Επιστρέφει το
κλειδί του επιλεγμένου στοιχείου, ή null
, εάν ο χρήστης δεν
επέλεξε τίποτα. Η μέθοδος getSelectedItem()
επιστρέφει την τιμή αντί για
το κλειδί.
$countries = [
'CZ' => 'Τσεχία',
'SK' => 'Σλοβακία',
'GR' => 'Ελλάδα',
];
$form->addSelect('country', 'Χώρα:', $countries)
->setDefaultValue('GR');
Τον πίνακα των προσφερόμενων στοιχείων τον παραδίδουμε ως τρίτη
παράμετρο ή με τη μέθοδο setItems()
. Τα στοιχεία μπορούν να είναι και
δισδιάστατος πίνακας:
$countries = [
'Europe' => [
'CZ' => 'Τσεχία',
'SK' => 'Σλοβακία',
'GR' => 'Ελλάδα',
],
'CA' => 'Καναδάς',
'US' => 'ΗΠΑ',
'?' => 'άλλη',
];
Στα select boxes, συχνά το πρώτο στοιχείο έχει ειδική σημασία, χρησιμεύει
ως προτροπή για δράση. Για την προσθήκη ενός τέτοιου στοιχείου
χρησιμοποιείται η μέθοδος setPrompt()
.
$form->addSelect('country', 'Χώρα:', $countries)
->setPrompt('Επιλέξτε χώρα');
Με τη χρήση του setDisabled(['CZ', 'SK'])
μπορούν να απενεργοποιηθούν
μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι το επιλεγμένο στοιχείο είναι πράγματι ένα από τα προσφερόμενα και
δεν έχει απενεργοποιηθεί. Με τη μέθοδο getRawValue()
μπορεί να ληφθεί
το υποβληθέν στοιχείο χωρίς αυτόν τον σημαντικό έλεγχο.
Κατά τον ορισμό του προεπιλεγμένου επιλεγμένου στοιχείου, ελέγχει
επίσης ότι είναι ένα από τα προσφερόμενα, διαφορετικά προκαλεί
εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη χρήση του
checkDefaultValue(false)
.
addMultiSelect (string|int $name, $label=null, ?array $items=null, ?int $size=null): MultiSelectBox
Προσθέτει ένα select box για την επιλογή πολλαπλών στοιχείων (κλάση MultiSelectBox). Επιστρέφει
έναν πίνακα με τα κλειδιά των επιλεγμένων στοιχείων. Η μέθοδος
getSelectedItems()
επιστρέφει τις τιμές αντί για τα κλειδιά.
$form->addMultiSelect('countries', 'Χώρες:', $countries);
Τον πίνακα των προσφερόμενων στοιχείων τον παραδίδουμε ως τρίτη
παράμετρο ή με τη μέθοδο setItems()
. Τα στοιχεία μπορούν να είναι και
δισδιάστατος πίνακας.
Με τη χρήση του setDisabled(['CZ', 'SK'])
μπορούν να απενεργοποιηθούν
μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι τα επιλεγμένα στοιχεία είναι πράγματι ένα από τα προσφερόμενα και
δεν έχουν απενεργοποιηθεί. Με τη μέθοδο getRawValue()
μπορούν να
ληφθούν τα υποβληθέντα στοιχεία χωρίς αυτόν τον σημαντικό έλεγχο.
Κατά τον ορισμό των προεπιλεγμένων επιλεγμένων στοιχείων, ελέγχει
επίσης ότι είναι ένα από τα προσφερόμενα, διαφορετικά προκαλεί
εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη χρήση του
checkDefaultValue(false)
.
addUpload (string|int $name, $label=null): UploadControl
Προσθέτει ένα πεδίο για τη μεταφόρτωση αρχείου (κλάση UploadControl). Επιστρέφει ένα
αντικείμενο FileUpload ακόμα και στην
περίπτωση που ο χρήστης δεν υπέβαλε κανένα αρχείο, κάτι που μπορεί να
διαπιστωθεί με τη μέθοδο FileUpload::hasFile()
.
$form->addUpload('avatar', 'Avatar:')
->addRule($form::Image, 'Το Avatar πρέπει να είναι JPEG, PNG, GIF, WebP ή AVIF.')
->addRule($form::MaxFileSize, 'Το μέγιστο μέγεθος είναι 1 MB.', 1024 * 1024);
Εάν το αρχείο δεν μεταφορτωθεί σωστά, η φόρμα δεν υποβάλλεται
επιτυχώς και εμφανίζεται σφάλμα. Δηλαδή, κατά την επιτυχή υποβολή δεν
χρειάζεται να επαληθεύσετε τη μέθοδο FileUpload::isOk()
.
Ποτέ μην εμπιστεύεστε το αρχικό όνομα του αρχείου που επιστρέφεται
από τη μέθοδο FileUpload::getName()
, ο πελάτης θα μπορούσε να έχει στείλει
ένα κακόβουλο όνομα αρχείου με σκοπό να βλάψει ή να χακάρει την
εφαρμογή σας.
Οι κανόνες MimeType
και Image
ανιχνεύουν τον απαιτούμενο τύπο
βάσει της υπογραφής του αρχείου και δεν επαληθεύουν την ακεραιότητά
του. Το αν μια εικόνα είναι κατεστραμμένη μπορεί να διαπιστωθεί, για
παράδειγμα, προσπαθώντας να τη φορτώσετε.
addMultiUpload (string|int $name, $label=null): UploadControl
Προσθέτει ένα πεδίο για τη μεταφόρτωση πολλαπλών αρχείων ταυτόχρονα
(κλάση UploadControl).
Επιστρέφει έναν πίνακα αντικειμένων FileUpload. Η μέθοδος FileUpload::hasFile()
σε καθένα από αυτά θα επιστρέφει true
.
$form->addMultiUpload('files', 'Αρχεία:')
->addRule($form::MaxLength, 'Μπορούν να μεταφορτωθούν το πολύ %d αρχεία', 10);
Εάν κάποιο αρχείο δεν μεταφορτωθεί σωστά, η φόρμα δεν υποβάλλεται
επιτυχώς και εμφανίζεται σφάλμα. Δηλαδή, κατά την επιτυχή υποβολή δεν
χρειάζεται να επαληθεύσετε τη μέθοδο FileUpload::isOk()
.
Ποτέ μην εμπιστεύεστε τα αρχικά ονόματα των αρχείων που
επιστρέφονται από τη μέθοδο FileUpload::getName()
, ο πελάτης θα μπορούσε
να έχει στείλει ένα κακόβουλο όνομα αρχείου με σκοπό να βλάψει ή να
χακάρει την εφαρμογή σας.
Οι κανόνες MimeType
και Image
ανιχνεύουν τον απαιτούμενο τύπο
βάσει της υπογραφής του αρχείου και δεν επαληθεύουν την ακεραιότητά
του. Το αν μια εικόνα είναι κατεστραμμένη μπορεί να διαπιστωθεί, για
παράδειγμα, προσπαθώντας να τη φορτώσετε.
addDate (string|int $name, $label=null): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στον χρήστη να εισάγει εύκολα μια ημερομηνία που αποτελείται από έτος, μήνα και ημέρα (κλάση DateTimeControl).
Ως προεπιλεγμένη τιμή δέχεται είτε αντικείμενα που υλοποιούν το
interface DateTimeInterface
, ένα string με χρόνο, είτε έναν αριθμό που
αντιπροσωπεύει UNIX timestamp. Το ίδιο ισχύει για τα ορίσματα των κανόνων
Min
, Max
ή Range
, τα οποία ορίζουν την ελάχιστη και
μέγιστη επιτρεπόμενη ημερομηνία.
$form->addDate('date', 'Ημερομηνία:')
->setDefaultValue(new DateTime)
->addRule($form::Min, 'Η ημερομηνία πρέπει να είναι τουλάχιστον ενός μηνός παλιά.', new DateTime('-1 month'));
Συνήθως επιστρέφει ένα αντικείμενο DateTimeImmutable
, με τη μέθοδο
setFormat()
μπορείτε να καθορίσετε τη μορφή κειμένου ή
timestamp:
$form->addDate('date', 'Ημερομηνία:')
->setFormat('Y-m-d');
addTime (string|int $name, $label=null, bool $withSeconds=false): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στον χρήστη να εισάγει εύκολα έναν χρόνο που αποτελείται από ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση DateTimeControl).
Ως προεπιλεγμένη τιμή δέχεται είτε αντικείμενα που υλοποιούν το
interface DateTimeInterface
, ένα string με χρόνο, είτε έναν αριθμό που
αντιπροσωπεύει UNIX timestamp. Από αυτές τις εισόδους χρησιμοποιείται μόνο η
πληροφορία του χρόνου, η ημερομηνία αγνοείται. Το ίδιο ισχύει για τα
ορίσματα των κανόνων Min
, Max
ή Range
, τα οποία ορίζουν
τον ελάχιστο και μέγιστο επιτρεπόμενο χρόνο. Εάν η καθορισμένη
ελάχιστη τιμή είναι υψηλότερη από τη μέγιστη, δημιουργείται ένα
χρονικό εύρος που υπερβαίνει τα μεσάνυχτα.
$form->addTime('time', 'Ώρα:', withSeconds: true)
->addRule($form::Range, 'Η ώρα πρέπει να είναι στο εύρος από %s έως %s.', ['12:30', '13:30']);
Συνήθως επιστρέφει ένα αντικείμενο DateTimeImmutable
(με ημερομηνία
1 Ιανουαρίου του έτους 1), με τη μέθοδο setFormat()
μπορείτε να
καθορίσετε τη μορφή κειμένου:
$form->addTime('time', 'Ώρα:')
->setFormat('H:i');
addDateTime (string|int $name, $label=null, bool $withSeconds=false): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στον χρήστη να εισάγει εύκολα ημερομηνία και ώρα που αποτελείται από έτος, μήνα, ημέρα, ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση DateTimeControl).
Ως προεπιλεγμένη τιμή δέχεται είτε αντικείμενα που υλοποιούν το
interface DateTimeInterface
, ένα string με χρόνο, είτε έναν αριθμό που
αντιπροσωπεύει UNIX timestamp. Το ίδιο ισχύει για τα ορίσματα των κανόνων
Min
, Max
ή Range
, τα οποία ορίζουν την ελάχιστη και
μέγιστη επιτρεπόμενη ημερομηνία.
$form->addDateTime('datetime', 'Ημερομηνία και ώρα:')
->setDefaultValue(new DateTime)
->addRule($form::Min, 'Η ημερομηνία πρέπει να είναι τουλάχιστον ενός μηνός παλιά.', new DateTime('-1 month'));
Συνήθως επιστρέφει ένα αντικείμενο DateTimeImmutable
, με τη μέθοδο
setFormat()
μπορείτε να καθορίσετε τη μορφή κειμένου ή
timestamp:
$form->addDateTime('datetime')
->setFormat(DateTimeControl::FormatTimestamp);
addColor (string|int $name, $label=null): ColorPicker
Προσθέτει ένα πεδίο για την επιλογή χρώματος (κλάση ColorPicker). Το χρώμα είναι
ένα string στη μορφή #rrggbb
. Εάν ο χρήστης δεν κάνει επιλογή,
επιστρέφεται το μαύρο χρώμα #000000
.
$form->addColor('color', 'Χρώμα:')
->setDefaultValue('#3C8ED7');
addHidden (string|int $name, ?string $default=null): HiddenField
Προσθέτει ένα κρυφό πεδίο (κλάση HiddenField).
$form->addHidden('userid');
Με τη χρήση του setNullable()
μπορεί να οριστεί να επιστρέφει
null
αντί για κενό string. Η τροποποίηση της υποβληθείσας τιμής είναι
δυνατή με το addFilter().
Παρόλο που το στοιχείο είναι κρυφό, είναι σημαντικό να συνειδητοποιήσετε ότι η τιμή μπορεί ακόμα να τροποποιηθεί ή να πλαστογραφηθεί από έναν εισβολέα. Πάντα επαληθεύετε και επικυρώνετε διεξοδικά όλες τις λαμβανόμενες τιμές στην πλευρά του διακομιστή για να αποφύγετε κινδύνους ασφαλείας που σχετίζονται με τη χειραγώγηση δεδομένων.
addSubmit (string|int $name, $caption=null): SubmitButton
Προσθέτει ένα κουμπί υποβολής (κλάση SubmitButton).
$form->addSubmit('submit', 'Υποβολή');
Στη φόρμα είναι δυνατόν να υπάρχουν και περισσότερα κουμπιά υποβολής:
$form->addSubmit('register', 'Εγγραφή');
$form->addSubmit('cancel', 'Ακύρωση');
Για να διαπιστώσετε σε ποιο από αυτά έγινε κλικ, χρησιμοποιήστε:
if ($form['register']->isSubmittedBy()) {
// ...
}
Εάν δεν θέλετε να επικυρώσετε ολόκληρη τη φόρμα κατά το πάτημα του κουμπιού (για παράδειγμα, στα κουμπιά Ακύρωση ή Προεπισκόπηση), χρησιμοποιήστε το setValidationScope().
addButton (string|int $name, $caption): Button
Προσθέτει ένα κουμπί (κλάση Button), το οποίο δεν έχει λειτουργία υποβολής. Μπορεί επομένως να χρησιμοποιηθεί για κάποια άλλη λειτουργία, π.χ. κλήση μιας συνάρτησης JavaScript κατά το κλικ.
$form->addButton('raise', 'Αύξηση μισθού')
->setHtmlAttribute('onclick', 'raiseSalary()');
addImageButton (string|int $name, ?string $src=null, ?string $alt=null): ImageButton
Προσθέτει ένα κουμπί υποβολής με τη μορφή εικόνας (κλάση ImageButton).
$form->addImageButton('submit', '/path/to/image');
Κατά τη χρήση πολλαπλών κουμπιών υποβολής, μπορείτε να διαπιστώσετε
σε ποιο έγινε κλικ, χρησιμοποιώντας το $form['submit']->isSubmittedBy()
.
addContainer (string|int $name): Container
Προσθέτει μια υποφόρμα (κλάση Container), ή αλλιώς container, στο οποίο
μπορούν να προστεθούν άλλα στοιχεία με τον ίδιο τρόπο που τα
προσθέτουμε στη φόρμα. Λειτουργούν επίσης οι μέθοδοι setDefaults()
ή
getValues()
.
$sub1 = $form->addContainer('first');
$sub1->addText('name', 'Το όνομά σας:');
$sub1->addEmail('email', 'Email:');
$sub2 = $form->addContainer('second');
$sub2->addText('name', 'Το όνομά σας:');
$sub2->addEmail('email', 'Email:');
Τα υποβληθέντα δεδομένα επιστρέφονται στη συνέχεια ως πολυδιάστατη δομή:
[
'first' => [
'name' => /* ... */,
'email' => /* ... */,
],
'second' => [
'name' => /* ... */,
'email' => /* ... */,
],
]
Επισκόπηση ρυθμίσεων
Σε όλα τα στοιχεία μπορούμε να καλέσουμε τις ακόλουθες μεθόδους (πλήρης επισκόπηση στην τεκμηρίωση API):
setDefaultValue($value) |
ορίζει την προεπιλεγμένη τιμή |
getValue() |
λαμβάνει την τρέχουσα τιμή |
setOmitted() |
Παράλειψη τιμής |
setDisabled() |
Απενεργοποίηση στοιχείων |
Απόδοση:
setCaption($caption) |
αλλάζει την ετικέτα του στοιχείου |
setTranslator($translator) |
ορίζει τον μεταφραστή |
setHtmlAttribute($name, $value) |
ορίζει το HTML attribute του στοιχείου |
setHtmlId($id) |
ορίζει το HTML attribute id |
setHtmlType($type) |
ορίζει το HTML attribute type |
setHtmlName($name) |
ορίζει το HTML attribute name |
setOption($key, $value) |
ρυθμίσεις για απόδοση |
Επικύρωση:
setRequired() |
υποχρεωτικό στοιχείο |
addRule() |
ορίζει τον κανόνα επικύρωσης |
addCondition() , addConditionOn() |
ορίζει τη συνθήκη επικύρωσης |
addError($message) |
παράδοση μηνύματος σφάλματος |
Στα στοιχεία addText()
, addPassword()
, addTextArea()
,
addEmail()
, addInteger()
μπορούν να κληθούν οι ακόλουθες μέθοδοι:
setNullable() |
ορίζει αν το getValue() θα επιστρέψει null αντί για κενό string |
setEmptyValue($value) |
ορίζει μια ειδική τιμή που θεωρείται κενό string |
setMaxLength($length) |
ορίζει τον μέγιστο αριθμό επιτρεπόμενων χαρακτήρων |
addFilter($filter) |
επεξεργασία εισόδου |
Παράλειψη τιμής
Εάν η τιμή που συμπλήρωσε ο χρήστης δεν μας ενδιαφέρει, μπορούμε να
την παραλείψουμε από το αποτέλεσμα της μεθόδου $form->getValues()
ή
από τα δεδομένα που παραδίδονται στους handlers με τη χρήση του
setOmitted()
. Αυτό είναι χρήσιμο για διάφορους κωδικούς ελέγχου,
στοιχεία antispam κ.λπ.
$form->addPassword('passwordVerify', 'Κωδικός για έλεγχο:')
->setRequired('Παρακαλώ εισάγετε τον κωδικό ξανά για έλεγχο')
->addRule($form::Equal, 'Οι κωδικοί δεν ταιριάζουν', $form['password'])
->setOmitted();
Απενεργοποίηση στοιχείων
Τα στοιχεία μπορούν να απενεργοποιηθούν με τη χρήση του
setDisabled()
. Ένα τέτοιο στοιχείο δεν μπορεί να επεξεργαστεί ο
χρήστης.
$form->addText('username', 'Όνομα χρήστη:')
->setDisabled();
Τα απενεργοποιημένα στοιχεία ο περιηγητής δεν τα στέλνει καθόλου
στον διακομιστή, επομένως δεν θα τα βρείτε ούτε στα δεδομένα που
επιστρέφει η συνάρτηση $form->getValues()
. Ωστόσο, εάν ορίσετε
setOmitted(false)
, το Nette θα συμπεριλάβει την προεπιλεγμένη τους τιμή σε
αυτά τα δεδομένα.
Κατά την κλήση του setDisabled()
, για λόγους ασφαλείας διαγράφεται
η τιμή του στοιχείου. Εάν ορίζετε μια προεπιλεγμένη τιμή, είναι
απαραίτητο να το κάνετε μετά την απενεργοποίησή του:
$form->addText('username', 'Όνομα χρήστη:')
->setDisabled()
->setDefaultValue($userName);
Μια εναλλακτική λύση στα απενεργοποιημένα στοιχεία είναι τα
στοιχεία με το HTML attribute readonly
, τα οποία ο περιηγητής στέλνει στον
διακομιστή. Παρόλο που το στοιχείο είναι μόνο για ανάγνωση, είναι
σημαντικό να συνειδητοποιήσετε ότι η τιμή του μπορεί ακόμα να
τροποποιηθεί ή να πλαστογραφηθεί από έναν εισβολέα.
Προσαρμοσμένα στοιχεία
Εκτός από την ευρεία γκάμα ενσωματωμένων στοιχείων φόρμας, μπορείτε να προσθέσετε προσαρμοσμένα στοιχεία στη φόρμα με αυτόν τον τρόπο:
$form->addComponent(new DateInput('Ημερομηνία:'), 'date');
// εναλλακτική σύνταξη: $form['date'] = new DateInput('Ημερομηνία:');
Η φόρμα είναι απόγονος της κλάσης Container και τα επιμέρους στοιχεία είναι απόγονοι του Component.
Υπάρχει ένας τρόπος να ορίσετε νέες μεθόδους φόρμας που χρησιμεύουν
για την προσθήκη προσαρμοσμένων στοιχείων (π.χ. $form->addZip()
).
Πρόκειται για τις λεγόμενες extension methods. Το μειονέκτημα είναι ότι η
αυτόματη συμπλήρωση στους επεξεργαστές δεν θα λειτουργεί για αυτές.
use Nette\Forms\Container;
// προσθέτουμε τη μέθοδο addZip(string $name, ?string $label = null)
Container::extensionMethod('addZip', function (Container $form, string $name, ?string $label = null) {
return $form->addText($name, $label)
->addRule($form::Pattern, 'Τουλάχιστον 5 αριθμοί', '[0-9]{5}');
});
// χρήση
$form->addZip('zip', 'ZIP code:');
Στοιχεία χαμηλού επιπέδου
Μπορούν να χρησιμοποιηθούν και στοιχεία που γράφουμε μόνο στο template
και δεν τα προσθέτουμε στη φόρμα με κάποια από τις μεθόδους
$form->addXyz()
. Για παράδειγμα, όταν εμφανίζουμε εγγραφές από τη
βάση δεδομένων και δεν ξέρουμε εκ των προτέρων πόσες θα είναι και ποια
θα είναι τα ID τους, και θέλουμε σε κάθε γραμμή να εμφανίσουμε ένα checkbox ή
ένα radio button, αρκεί να το κωδικοποιήσουμε στο template:
{foreach $items as $item}
<p><input type=checkbox name="sel[]" value={$item->id}> {$item->name}</p>
{/foreach}
Και μετά την υποβολή, βρίσκουμε την τιμή:
$data = $form->getHttpData($form::DataText, 'sel[]');
$data = $form->getHttpData($form::DataText | $form::DataKeys, 'sel[]');
όπου η πρώτη παράμετρος είναι ο τύπος του στοιχείου (DataFile
για
type=file
, DataLine
για εισόδους μίας γραμμής όπως text
,
password
, email
κ.λπ. και DataText
για όλα τα υπόλοιπα) και η
δεύτερη παράμετρος sel[]
αντιστοιχεί στο HTML attribute name. Μπορούμε να
συνδυάσουμε τον τύπο του στοιχείου με την τιμή DataKeys
, η οποία
διατηρεί τα κλειδιά των στοιχείων. Αυτό είναι ιδιαίτερα χρήσιμο για
select
, radioList
και checkboxList
.
Το ουσιαστικό είναι ότι το getHttpData()
επιστρέφει μια
απολυμασμένη τιμή, σε αυτή την περίπτωση θα είναι πάντα ένας πίνακας
έγκυρων UTF-8 strings, ανεξάρτητα από το τι θα προσπαθούσε να υποβάλει ένας
εισβολέας στον διακομιστή. Πρόκειται για μια αναλογία της άμεσης
εργασίας με το $_POST
ή το $_GET
, αλλά με τη σημαντική διαφορά
ότι επιστρέφει πάντα καθαρά δεδομένα, όπως είστε συνηθισμένοι με τα
τυπικά στοιχεία των φορμών Nette.