Έλεγχοι φόρμας
Επισκόπηση των ενσωματωμένων στοιχείων ελέγχου φόρμας.
addText(string|int $name, $label=null, $cols, ?int $maxLength=null): TextInput
Προσθέτει πεδίο κειμένου μονής γραμμής (κλάση TextInput). Αν ο χρήστης δεν
συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό ''
, ή
χρησιμοποιεί το setNullable()
για να το αλλάξει και να επιστρέφει
null
.
$form->addText('name', 'Name:')
->setRequired()
->setNullable();
Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά διαστήματος και αφαιρεί τα διαλείμματα γραμμής που θα μπορούσαν να σταλούν από έναν εισβολέα.
Το μέγιστο μήκος μπορεί να περιοριστεί χρησιμοποιώντας το
setMaxLength()
. Η addFilter() σας επιτρέπει να
αλλάξετε την τιμή που εισάγει ο χρήστης.
Μπορείτε να αλλάξετε τον οπτικό χαρακτήρα ενός πεδίου κειμένου σε
τύπους όπως search
, tel
ή url
χρησιμοποιώντας το
setHtmlType()
, όπως φαίνεται στις προδιαγραφές. Να θυμάστε
ότι η αλλαγή του τύπου είναι μόνο οπτική και δεν εκτελεί λειτουργίες
επικύρωσης. Για τον τύπο url
, είναι σκόπιμο να προσθέσετε έναν
ειδικό κανόνα URL.
Για άλλους τύπους εισόδου, όπως number
, range
,
email
, date
, datetime-local
, time
και color
,
χρησιμοποιήστε εξειδικευμένες μεθόδους όπως addInteger, addFloat, addEmail addDate, addTime, addDateTime και addColor, οι
οποίες εξασφαλίζουν επικύρωση από την πλευρά του διακομιστή. Οι τύποι
month
και week
δεν υποστηρίζονται ακόμη πλήρως από όλους τους
φυλλομετρητές.
Για το στοιχείο μπορεί να οριστεί η λεγόμενη κενή τιμή (empty-value), η
οποία είναι κάτι σαν την προεπιλεγμένη τιμή, αλλά αν ο χρήστης δεν την
αντικαταστήσει, επιστρέφει κενή συμβολοσειρά ή null
.
$form->addText('phone', 'Phone:')
->setHtmlType('tel')
->setEmptyValue('+420');
addTextArea(string|int $name, $label=null): TextArea
Προσθέτει ένα πεδίο κειμένου πολλαπλών γραμμών (κλάση TextArea). Αν ο χρήστης δεν
συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό ''
, ή
χρησιμοποιεί το setNullable()
για να το αλλάξει και να επιστρέφει
null
.
$form->addTextArea('note', 'Note:')
->addRule($form::MaxLength, 'Your note is way too long', 10000);
Επικυρώνει αυτόματα το UTF-8 και κανονικοποιεί τα διαλείμματα γραμμής
στο \n
. Σε αντίθεση με ένα πεδίο εισαγωγής μιας γραμμής, δεν κόβει
το κενό διάστημα.
Το μέγιστο μήκος μπορεί να περιοριστεί χρησιμοποιώντας το
setMaxLength()
. Η addFilter() σας επιτρέπει να
αλλάξετε την τιμή που εισάγει ο χρήστης. Μπορείτε να ορίσετε τη
λεγόμενη κενή τιμή χρησιμοποιώντας το setEmptyValue()
.
addInteger(string|int $name, $label=null): TextInput
Προσθέτει πεδίο εισόδου για ακέραιο αριθμό (κλάση TextInput). Επιστρέφει είτε έναν
ακέραιο είτε το null
εάν ο χρήστης δεν εισάγει τίποτα.
$form->addInteger('year', 'Year:')
->addRule($form::Range, 'Το έτος πρέπει να βρίσκεται στο εύρος %d έως %d.', [1900, 2023 |1900, 2023]),
Το στοιχείο αποδίδεται ως <input type="numeric">
. Χρησιμοποιώντας τη
μέθοδο setHtmlType()
, μπορείτε να αλλάξετε τον τύπο σε range
για
εμφάνιση ως ολισθητής ή σε text
αν προτιμάτε ένα τυπικό πεδίο
κειμένου χωρίς την ειδική συμπεριφορά του numeric
.
addFloat(string|int $name, $label=null): TextInput
Adds a field for entering a decimal number (TextInput class). Returns either float or
null
, if the user does not specify anything.
$form->addFloat('level', 'Level:')
->setDefaultValue(0)
->addRule($form::Range, 'Το επίπεδο πρέπει να είναι στο εύρος %d έως %d.', [0, 100 |0, 100]),
Το στοιχείο αποδίδεται ως <input type="numeric">
. Χρησιμοποιώντας τη
μέθοδο setHtmlType()
, μπορείτε να αλλάξετε τον τύπο σε range
για
εμφάνιση ως ολισθητής ή σε text
αν προτιμάτε ένα τυπικό πεδίο
κειμένου χωρίς την ειδική συμπεριφορά του numeric
.
Η Nette και το πρόγραμμα περιήγησης Chrome δέχονται τόσο ένα κόμμα όσο και
μια τελεία ως δεκαδικά διαχωριστικά. Για να είναι διαθέσιμη αυτή η
λειτουργικότητα στον Firefox, συνιστάται να ορίσετε το χαρακτηριστικό
lang
είτε για το συγκεκριμένο στοιχείο είτε για ολόκληρη τη
σελίδα, για παράδειγμα, <html lang="cs">
.
addEmail(string|int $name, $label=null, int $maxLength=255): TextInput
Προσθέτει πεδίο διεύθυνσης ηλεκτρονικού ταχυδρομείου με έλεγχο
εγκυρότητας (κλάση TextInput).
Αν ο χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό
αλφαριθμητικό ''
, ή χρησιμοποιεί το setNullable()
για να το
αλλάξει και να επιστρέφει null
.
$form->addEmail('email', 'Email:');
Επαληθεύει ότι η τιμή είναι έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου. Δεν επαληθεύει ότι ο τομέας υπάρχει πραγματικά, μόνο η σύνταξη επαληθεύεται. Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά.
Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του
setMaxLength()
. Η addFilter() σας επιτρέπει να
αλλάξετε την τιμή που εισάγει ο χρήστης. Μπορείτε να ορίσετε τη
λεγόμενη κενή τιμή χρησιμοποιώντας το setEmptyValue()
.
addPassword(string|int $name, $label=null, $cols, ?int $maxLength=null): TextInput
Προσθέτει πεδίο κωδικού πρόσβασης (κλάση TextInput).
$form->addPassword('password', 'Password:')
->setRequired()
->addRule($form::MinLength, 'Password has to be at least %d characters long', 8)
->addRule($form::Pattern, 'Password must contain a number', '.*[0-9].*');
Όταν ξαναστείλετε τη φόρμα, η είσοδος θα είναι κενή. Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά διαστήματος και αφαιρεί τα διαλείμματα γραμμής που θα μπορούσαν να σταλούν από έναν εισβολέα.
addCheckbox(string|int $name, $caption=null): Checkbox
Προσθέτει ένα πλαίσιο ελέγχου (κλάση Checkbox). Το πεδίο επιστρέφει
είτε true
είτε false
, ανάλογα με το αν είναι τσεκαρισμένο.
$form->addCheckbox('agree', 'I agree with terms')
->setRequired('You must agree with our terms');
addCheckboxList(string|int $name, $label=null, ?array $items=null): CheckboxList
Προσθέτει λίστα με πλαίσια ελέγχου για την επιλογή πολλαπλών
στοιχείων (κλάση CheckboxList).
Επιστρέφει τον πίνακα με τα κλειδιά των επιλεγμένων στοιχείων. Η
μέθοδος getSelectedItems()
επιστρέφει τιμές αντί για κλειδιά.
$form->addCheckboxList('colors', 'Colors:', [
'r' => 'red',
'g' => 'green',
'b' => 'blue',
]);
Παραδίδουμε τον πίνακα των στοιχείων ως τρίτη παράμετρο ή με τη
μέθοδο setItems()
.
Μπορείτε να χρησιμοποιήσετε setDisabled(['r', 'g'])
για να
απενεργοποιήσετε μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι τα επιλεγμένα στοιχεία είναι πράγματι ένα από τα προσφερόμενα και
δεν έχουν απενεργοποιηθεί. Η μέθοδος getRawValue()
μπορεί να
χρησιμοποιηθεί για να ανακτήσετε τα προσφερόμενα στοιχεία χωρίς αυτόν
τον σημαντικό έλεγχο.
Όταν ορίζονται προεπιλεγμένες τιμές, ελέγχει επίσης ότι είναι ένα
από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο
έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο checkDefaultValue(false)
.
Εάν υποβάλετε μια φόρμα χρησιμοποιώντας τη μέθοδο GET
, μπορείτε
να επιλέξετε μια πιο συμπαγή μέθοδο μεταφοράς δεδομένων που
εξοικονομεί το μέγεθος της συμβολοσειράς ερωτημάτων. Αυτό
ενεργοποιείται με τη ρύθμιση του χαρακτηριστικού HTML της φόρμας:
$form->setHtmlAttribute('data-nette-compact');
addRadioList(string|int $name, $label=null, ?array $items=null): RadioList
Προσθέτει κουμπιά επιλογής (κλάση RadioList). Επιστρέφει το κλειδί
του επιλεγμένου στοιχείου ή null
αν ο χρήστης δεν επέλεξε τίποτα.
Η μέθοδος getSelectedItem()
επιστρέφει μια τιμή αντί για ένα κλειδί.
$sex = [
'm' => 'male',
'f' => 'female',
];
$form->addRadioList('gender', 'Gender:', $sex);
Περνάμε τον πίνακα των στοιχείων ως τρίτη παράμετρο, ή με τη μέθοδο
setItems()
.
Μπορείτε να χρησιμοποιήσετε setDisabled(['m'])
για να
απενεργοποιήσετε μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι το επιλεγμένο στοιχείο είναι πράγματι ένα από τα προσφερόμενα και
δεν έχει απενεργοποιηθεί. Η μέθοδος getRawValue()
μπορεί να
χρησιμοποιηθεί για την ανάκτηση του προσφερόμενου στοιχείου χωρίς
αυτόν τον σημαντικό έλεγχο.
Όταν έχει οριστεί η προεπιλεγμένη τιμή, ελέγχει επίσης ότι είναι ένα
από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο
έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο checkDefaultValue(false)
.
addSelect(string|int $name, $label=null, ?array $items=null, ?int $size=null): SelectBox
Προσθέτει πλαίσιο επιλογής (κλάση SelectBox). Επιστρέφει το κλειδί
του επιλεγμένου στοιχείου ή null
αν ο χρήστης δεν επέλεξε τίποτα.
Η μέθοδος getSelectedItem()
επιστρέφει μια τιμή αντί για ένα κλειδί.
$countries = [
'CZ' => 'Czech republic',
'SK' => 'Slovakia',
'GB' => 'United Kingdom',
];
$form->addSelect('country', 'Country:', $countries)
->setDefaultValue('SK');
Περνάμε τον πίνακα των στοιχείων ως τρίτη παράμετρο ή με τη μέθοδο
setItems()
. Ο πίνακας στοιχείων μπορεί επίσης να είναι
δισδιάστατος:
$countries = [
'Europe' => [
'CZ' => 'Czech republic',
'SK' => 'Slovakia',
'GB' => 'United Kingdom',
],
'CA' => 'Canada',
'US' => 'USA',
'?' => 'other',
];
Για πλαίσια επιλογής, το πρώτο στοιχείο έχει συχνά ιδιαίτερη σημασία,
χρησιμεύει ως κλήση προς δράση. Χρησιμοποιήστε τη μέθοδο setPrompt()
για να προσθέσετε μια τέτοια εγγραφή.
$form->addSelect('country', 'Country:', $countries)
->setPrompt('Pick a country');
Μπορείτε να χρησιμοποιήσετε setDisabled(['CZ', 'SK'])
για να
απενεργοποιήσετε μεμονωμένα στοιχεία.
Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και
ότι το επιλεγμένο στοιχείο είναι πράγματι ένα από τα προσφερόμενα και
δεν έχει απενεργοποιηθεί. Η μέθοδος getRawValue()
μπορεί να
χρησιμοποιηθεί για την ανάκτηση του προσφερόμενου στοιχείου χωρίς
αυτόν τον σημαντικό έλεγχο.
Όταν έχει οριστεί η προεπιλεγμένη τιμή, ελέγχει επίσης ότι είναι ένα
από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο
έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο checkDefaultValue(false)
.
addMultiSelect(string|int $name, $label=null, ?array $items=null, ?int $size=null): MultiSelectBox
Προσθέτει πλαίσιο επιλογής πολλαπλών επιλογών (κλάση MultiSelectBox). Επιστρέφει τον
πίνακα των κλειδιών των επιλεγμένων στοιχείων. Η μέθοδος
getSelectedItems()
επιστρέφει τιμές αντί για κλειδιά.
$form->addMultiSelect('countries', '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 must be JPEG, PNG, GIF or WebP')
->addRule($form::MaxFileSize, 'Maximum size is 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', 'Files:')
->addRule($form::MaxLength, 'A maximum of %d files can be uploaded', 10);
Εάν ένα από τα αρχεία δεν μπορέσει να φορτωθεί σωστά, η φόρμα δεν
υποβλήθηκε με επιτυχία και εμφανίζεται ένα σφάλμα. Δηλαδή, δεν είναι
απαραίτητο να ελεγχθεί η μέθοδος FileUpload::isOk()
.
Μην εμπιστεύεστε τα αρχικά ονόματα αρχείων που επιστρέφονται από τη
μέθοδο FileUpload::getName()
, ένας πελάτης θα μπορούσε να στείλει ένα
κακόβουλο όνομα αρχείου με σκοπό να καταστρέψει ή να χακάρει την
εφαρμογή σας.
Οι κανόνες MimeType
και Image
ανιχνεύουν τον απαιτούμενο τύπο
αρχείου ή εικόνας από την υπογραφή του. Η ακεραιότητα ολόκληρου του
αρχείου δεν ελέγχεται. Μπορείτε να διαπιστώσετε αν μια εικόνα δεν
είναι κατεστραμμένη, για παράδειγμα, προσπαθώντας να τη φορτώσετε.
addDate(string|int $name, $label=null): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα μια ημερομηνία που αποτελείται από έτος, μήνα και ημέρα (κλάση DateTimeControl).
Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν
το DateTimeInterface
, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που
αντιπροσωπεύει ένα UNIX timestamp. Το ίδιο ισχύει και για τα ορίσματα των
κανόνων Min
, Max
ή Range
, τα οποία καθορίζουν την
ελάχιστη και τη μέγιστη επιτρεπόμενη ημερομηνία.
$form->addDate('date', 'Date:')
->setDefaultValue(new DateTime)
->addRule($form::Min, 'The date must be at least a month old.', new DateTime('-1 month'));
Από προεπιλογή, επιστρέφει ένα αντικείμενο DateTimeImmutable
.
Χρησιμοποιώντας τη μέθοδο setFormat()
, μπορείτε να καθορίσετε μια μορφή κειμένου ή
μια χρονοσφραγίδα:
$form->addDate('date', 'Date:')
->setFormat('Y-m-d');
addTime(string|int $name, $label=null, bool $withSeconds=false): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα την ώρα που αποτελείται από ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση DateTimeControl).
Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν
το DateTimeInterface
, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που
αντιπροσωπεύει μια χρονοσφραγίδα UNIX. Χρησιμοποιείται μόνο η
πληροφορία της ώρας από αυτές τις εισόδους- η ημερομηνία αγνοείται. Το
ίδιο ισχύει και για τα ορίσματα των κανόνων Min
, Max
ή
Range
, τα οποία καθορίζουν τον ελάχιστο και μέγιστο επιτρεπόμενο
χρόνο. Εάν η ελάχιστη τιμή που έχει οριστεί είναι μεγαλύτερη από τη
μέγιστη, δημιουργείται ένα χρονικό εύρος που εκτείνεται μέχρι τα
μεσάνυχτα.
$form->addTime('time', 'Time:', withSeconds: true)
->addRule($form::Range, 'Time must be between %d and %d.', ['12:30', '13:30']);
Από προεπιλογή, επιστρέφει ένα αντικείμενο DateTimeImmutable
(με
ημερομηνία 1 Ιανουαρίου, έτος 1). Χρησιμοποιώντας τη μέθοδο
setFormat()
, μπορείτε να καθορίσετε μια μορφή κειμένου:
$form->addTime('time', 'Time:')
->setFormat('H:i');
addDateTime(string|int $name, $label=null, bool $withSeconds=false): DateTimeControl
Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα τόσο ημερομηνία όσο και ώρα που αποτελείται από έτος, μήνα, ημέρα, ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση DateTimeControl).
Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν
το DateTimeInterface
, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που
αντιπροσωπεύει ένα UNIX timestamp. Το ίδιο ισχύει και για τα ορίσματα των
κανόνων Min
, Max
ή Range
, τα οποία καθορίζουν την
ελάχιστη και τη μέγιστη επιτρεπόμενη ημερομηνία.
$form->addDateTime('datetime', 'Date and Time:')
->setDefaultValue(new DateTime)
->addRule($form::Min, 'The date must be at least a month old.', new DateTime('-1 month'));
Από προεπιλογή, επιστρέφει ένα αντικείμενο DateTimeImmutable
.
Χρησιμοποιώντας τη μέθοδο setFormat()
, μπορείτε να καθορίσετε μια μορφή κειμένου ή
μια χρονοσφραγίδα:
$form->addDateTime('datetime')
->setFormat(DateTimeControl::FormatTimestamp);
addColor(string|int $name, $label=null): ColorPicker
Προσθέτει ένα πεδίο επιλογής χρώματος (κλάση ColorPicker). Το χρώμα είναι μια
συμβολοσειρά στη μορφή #rrggbb
. Εάν ο χρήστης δεν κάνει επιλογή, το
προεπιλεγμένο χρώμα που επιστρέφεται είναι το μαύρο #000000
.
$form->addColor('color', 'Color:')
->setDefaultValue('#3C8ED7');
addHidden(string|int $name, ?string $default=null): HiddenField
Προσθέτει κρυφό πεδίο (κλάση HiddenField).
$form->addHidden('userid');
Χρησιμοποιήστε το setNullable()
για να το αλλάξετε ώστε να
επιστρέφει null
αντί για κενό αλφαριθμητικό. Η addFilter() σας επιτρέπει να αλλάξετε την
υποβαλλόμενη τιμή.
Παρόλο που το στοιχείο είναι κρυφό, είναι σημαντικό να συνειδητοποιήσετε ότι η τιμή του μπορεί να τροποποιηθεί ή να παραποιηθεί από έναν επιτιθέμενο. Πάντα να επαληθεύετε και να επικυρώνετε διεξοδικά όλες τις λαμβανόμενες τιμές στην πλευρά του διακομιστή για να αποφύγετε τους κινδύνους ασφαλείας που σχετίζονται με τη χειραγώγηση των δεδομένων.
addSubmit(string|int $name, $caption=null): SubmitButton
Προσθέτει κουμπί υποβολής (κλάση SubmitButton).
$form->addSubmit('submit', 'Register');
Είναι δυνατόν να υπάρχουν περισσότερα από ένα κουμπιά υποβολής στη φόρμα:
$form->addSubmit('register', 'Register');
$form->addSubmit('cancel', 'Cancel');
Για να μάθετε ποιο από αυτά έγινε κλικ, χρησιμοποιήστε:
if ($form['register']->isSubmittedBy()) {
// ...
}
Εάν δεν θέλετε να επικυρώνετε τη φόρμα όταν πατάτε ένα κουμπί υποβολής (όπως τα κουμπιά Ακύρωση ή Προεπισκόπηση), μπορείτε να το απενεργοποιήσετε με την setValidationScope().
addButton(string|int $name, $caption): Button
Προσθέτει κουμπί (κλάση Button) χωρίς λειτουργία submit. Είναι χρήσιμο για τη σύνδεση άλλων λειτουργιών με το id, για παράδειγμα μια ενέργεια JavaScript.
$form->addButton('raise', 'Raise salary')
->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), ή έναν περιέκτη, ο οποίος
μπορεί να αντιμετωπιστεί με τον ίδιο τρόπο όπως μια φόρμα. Αυτό
σημαίνει ότι μπορείτε να χρησιμοποιήσετε μεθόδους όπως setDefaults()
ή getValues()
.
$sub1 = $form->addContainer('first');
$sub1->addText('name', 'Your name:');
$sub1->addEmail('email', 'Email:');
$sub2 = $form->addContainer('second');
$sub2->addText('name', 'Your 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 του στοιχείου |
setHtmlId($id) |
ορίζει το χαρακτηριστικό HTML id |
setHtmlType($type) |
ορίζει το χαρακτηριστικό HTML type |
setHtmlName($name) |
ορίζει το χαρακτηριστικό HTML name |
setOption($key, $value) |
ορίζει δεδομένα απόδοσης |
Επικύρωση:
setRequired() |
υποχρεωτικό πεδίο |
addRule() |
set validation rule |
addCondition() , addConditionOn() |
set validation condition |
addError($message) |
περνώντας μήνυμα σφάλματος |
Οι ακόλουθες μέθοδοι μπορούν να κληθούν για τα στοιχεία addText()
,
addPassword()
, addTextArea()
, addEmail()
, addInteger()
:
setNullable() |
καθορίζει αν η getValue() επιστρέφει null αντί για κενό
αλφαριθμητικό. |
setEmptyValue($value) |
ορίζει την ειδική τιμή που αντιμετωπίζεται ως κενή συμβολοσειρά |
setMaxLength($length) |
ορίζει τον μέγιστο αριθμό επιτρεπόμενων χαρακτήρων |
addFilter($filter) |
τροποποίηση τιμών εισόδου |
Παραλειφθείσες τιμές
Αν δεν σας ενδιαφέρει η τιμή που εισάγει ο χρήστης, μπορούμε να
χρησιμοποιήσουμε το setOmitted()
για να την παραλείψουμε από το
αποτέλεσμα που παρέχεται από τη μέθοδο $form->getValues()
ή που
περνάει στους χειριστές. Αυτό είναι κατάλληλο για διάφορους κωδικούς
πρόσβασης για επαλήθευση, πεδία antispam κ.λπ.
$form->addPassword('passwordVerify', 'Password again:')
->setRequired('Fill your password again to check for typo')
->addRule($form::Equal, 'Password mismatch', $form['password'])
->setOmitted();
Απενεργοποίηση εισόδων
Οι είσοδοι μπορούν να απενεργοποιηθούν χρησιμοποιώντας το
setDisabled()
. Ο χρήστης δεν μπορεί να επεξεργαστεί μια
απενεργοποιημένη είσοδο.
$form->addText('username', 'User name:')
->setDisabled();
Οι απενεργοποιημένες είσοδοι δεν αποστέλλονται στον διακομιστή από
το πρόγραμμα περιήγησης, επομένως δεν θα τις βρείτε στα δεδομένα που
επιστρέφονται από τη λειτουργία $form->getValues()
. Ωστόσο, αν ορίσετε
το setOmitted(false)
, η Nette θα συμπεριλάβει την προεπιλεγμένη τιμή τους
σε αυτά τα δεδομένα.
Όταν καλείται η setDisabled()
, η τιμή της εισόδου διαγράφεται για
λόγους ασφαλείας. Εάν ορίζετε μια προεπιλεγμένη τιμή, είναι απαραίτητο
να το κάνετε μετά την απενεργοποίησή της:
$form->addText('username', 'User name:')
->setDisabled()
->setDefaultValue($userName);
Μια εναλλακτική λύση για τις απενεργοποιημένες εισόδους είναι τα
πεδία με το χαρακτηριστικό HTML readonly
, τα οποία αποστέλλονται στον
διακομιστή από το πρόγραμμα περιήγησης. Αν και το πεδίο είναι μόνο
αναγνώσιμο, είναι σημαντικό να συνειδητοποιήσετε ότι η τιμή του
μπορεί να τροποποιηθεί ή να παραποιηθεί από έναν εισβολέα.
Προσαρμοσμένα στοιχεία ελέγχου
Εκτός από το ευρύ φάσμα των ενσωματωμένων στοιχείων ελέγχου της φόρμας, μπορείτε να προσθέσετε προσαρμοσμένα στοιχεία ελέγχου στη φόρμα ως εξής:
$form->addComponent(new DateInput('Date:'), 'date');
// εναλλακτική σύνταξη: Ημερομηνία:'),
Η φόρμα είναι απόγονος της κλάσης Container και τα στοιχεία είναι απόγονοι της κλάσης Component.
Υπάρχει τρόπος ορισμού νέων μεθόδων φόρμας για την προσθήκη
προσαρμοσμένων στοιχείων (π.χ. $form->addZip()
). Αυτές είναι οι
λεγόμενες μέθοδοι επέκτασης. Το μειονέκτημα είναι ότι οι υποδείξεις
κώδικα στους συντάκτες δεν θα λειτουργούν για αυτές.
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, 'At least 5 numbers', '[0-9]{5}');
});
// χρήση
$form->addZip('zip', 'ZIP code:');
Πεδία χαμηλού επιπέδου
Για να προσθέσετε ένα στοιχείο στη φόρμα, δεν χρειάζεται να καλέσετε
το $form->addXyz()
. Αντ' αυτού, τα στοιχεία της φόρμας μπορούν να
εισαχθούν αποκλειστικά σε πρότυπα. Αυτό είναι χρήσιμο εάν, για
παράδειγμα, πρέπει να δημιουργήσετε δυναμικά στοιχεία:
{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
για τις υπόλοιπες). Η
δεύτερη παράμετρος αντιστοιχεί στο χαρακτηριστικό HTML name
. Εάν
πρέπει να διατηρήσετε τα κλειδιά, μπορείτε να συνδυάσετε την πρώτη
παράμετρο με το DataKeys
. Αυτό είναι χρήσιμο για τα select
,
radioList
ή checkboxList
.
Το getHttpData()
επιστρέφει καθαρισμένη είσοδο. Σε αυτή την
περίπτωση, θα είναι πάντα πίνακας έγκυρων συμβολοσειρών UTF-8,
ανεξάρτητα από το τι επιτιθέμενος στέλνει από τη φόρμα. Είναι μια
εναλλακτική λύση για να εργαστείτε απευθείας με το $_POST
ή το
$_GET
, αν θέλετε να λαμβάνετε ασφαλή δεδομένα.