Nette Documentation Preview

syntax
Έλεγχοι φόρμας
**************

.[perex]
Επισκόπηση των ενσωματωμένων στοιχείων ελέγχου φόρμας.


addText(string|int $name, $label=null): TextInput .[method]
===========================================================

Προσθέτει πεδίο κειμένου μονής γραμμής (κλάση [TextInput |api:Nette\Forms\Controls\TextInput]). Αν ο χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό `''`, ή χρησιμοποιεί το `setNullable()` για να το αλλάξει και να επιστρέφει `null`.

```php
$form->addText('name', 'Name:')
	->setRequired()
	->setNullable();
```

Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά διαστήματος και αφαιρεί τα διαλείμματα γραμμής που θα μπορούσαν να σταλούν από έναν εισβολέα.

Το μέγιστο μήκος μπορεί να περιοριστεί χρησιμοποιώντας το `setMaxLength()`. Η [addFilter() |validation#Modifying Input Values] σας επιτρέπει να αλλάξετε την τιμή που εισάγει ο χρήστης.

Μπορείτε να αλλάξετε τον οπτικό χαρακτήρα ενός πεδίου κειμένου σε τύπους όπως `search`, `tel` ή `url` χρησιμοποιώντας το `setHtmlType()`, όπως φαίνεται στις [προδιαγραφές |https://developer.mozilla.org/en-US/docs/Learn/Forms/HTML5_input_types]. Να θυμάστε ότι η αλλαγή του τύπου είναι μόνο οπτική και δεν εκτελεί λειτουργίες επικύρωσης. Για τον τύπο `url`, είναι σκόπιμο να προσθέσετε έναν ειδικό [κανόνα URL |validation#Text inputs].

.[note]
Για άλλους τύπους εισόδου, όπως `number`, `range`, `email`, `date`, `datetime-local`, `time` και `color`, χρησιμοποιήστε εξειδικευμένες μεθόδους όπως [addInteger |#addInteger], [addFloat |#addFloat], [addEmail |#addEmail] [addDate |#addDate], [addTime |#addTime], [addDateTime |#addDateTime] και [addColor |#addColor], οι οποίες εξασφαλίζουν επικύρωση από την πλευρά του διακομιστή. Οι τύποι `month` και `week` δεν υποστηρίζονται ακόμη πλήρως από όλους τους φυλλομετρητές.

Για το στοιχείο μπορεί να οριστεί η λεγόμενη κενή τιμή (empty-value), η οποία είναι κάτι σαν την προεπιλεγμένη τιμή, αλλά αν ο χρήστης δεν την αντικαταστήσει, επιστρέφει κενή συμβολοσειρά ή `null`.

```php
$form->addText('phone', 'Phone:')
	->setHtmlType('tel')
	->setEmptyValue('+420');
```


addTextArea(string|int $name, $label=null): TextArea .[method]
==============================================================

Προσθέτει ένα πεδίο κειμένου πολλαπλών γραμμών (κλάση [TextArea |api:Nette\Forms\Controls\TextArea]). Αν ο χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό `''`, ή χρησιμοποιεί το `setNullable()` για να το αλλάξει και να επιστρέφει `null`.

```php
$form->addTextArea('note', 'Note:')
	->addRule($form::MaxLength, 'Your note is way too long', 10000);
```

Επικυρώνει αυτόματα το UTF-8 και κανονικοποιεί τα διαλείμματα γραμμής στο `\n`. Σε αντίθεση με ένα πεδίο εισαγωγής μιας γραμμής, δεν κόβει το κενό διάστημα.

Το μέγιστο μήκος μπορεί να περιοριστεί χρησιμοποιώντας το `setMaxLength()`. Η [addFilter() |validation#Modifying Input Values] σας επιτρέπει να αλλάξετε την τιμή που εισάγει ο χρήστης. Μπορείτε να ορίσετε τη λεγόμενη κενή τιμή χρησιμοποιώντας το `setEmptyValue()`.


addInteger(string|int $name, $label=null): TextInput .[method]
==============================================================

Προσθέτει πεδίο εισόδου για ακέραιο αριθμό (κλάση [TextInput |api:Nette\Forms\Controls\TextInput]). Επιστρέφει είτε έναν ακέραιο είτε το `null` εάν ο χρήστης δεν εισάγει τίποτα.

```php
$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 .[method]{data-version:3.1.12}
=================================================================================

Adds a field for entering a decimal number ([TextInput |api:Nette\Forms\Controls\TextInput] class). Returns either float or `null`, if the user does not specify anything.

```php
$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): TextInput .[method]
============================================================

Προσθέτει πεδίο διεύθυνσης ηλεκτρονικού ταχυδρομείου με έλεγχο εγκυρότητας (κλάση [TextInput |api:Nette\Forms\Controls\TextInput]). Αν ο χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό `''`, ή χρησιμοποιεί το `setNullable()` για να το αλλάξει και να επιστρέφει `null`.

```php
$form->addEmail('email', 'Email:');
```

Επαληθεύει ότι η τιμή είναι έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου. Δεν επαληθεύει ότι ο τομέας υπάρχει πραγματικά, μόνο η σύνταξη επαληθεύεται. Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά.

Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του `setMaxLength()`. Η [addFilter() |validation#Modifying Input Values] σας επιτρέπει να αλλάξετε την τιμή που εισάγει ο χρήστης. Μπορείτε να ορίσετε τη λεγόμενη κενή τιμή χρησιμοποιώντας το `setEmptyValue()`.


addPassword(string|int $name, $label=null): TextInput .[method]
===============================================================

Προσθέτει πεδίο κωδικού πρόσβασης (κλάση [TextInput |api:Nette\Forms\Controls\TextInput]).

```php
$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 .[method]
================================================================

Προσθέτει ένα πλαίσιο ελέγχου (κλάση [Checkbox |api:Nette\Forms\Controls\Checkbox]). Το πεδίο επιστρέφει είτε `true` είτε `false`, ανάλογα με το αν είναι τσεκαρισμένο.

```php
$form->addCheckbox('agree', 'I agree with terms')
	->setRequired('You must agree with our terms');
```


addCheckboxList(string|int $name, $label=null, array $items=null): CheckboxList .[method]
=========================================================================================

Προσθέτει λίστα με πλαίσια ελέγχου για την επιλογή πολλαπλών στοιχείων (κλάση [CheckboxList |api:Nette\Forms\Controls\CheckboxList]). Επιστρέφει τον πίνακα με τα κλειδιά των επιλεγμένων στοιχείων. Η μέθοδος `getSelectedItems()` επιστρέφει τιμές αντί για κλειδιά.

```php
$form->addCheckboxList('colors', 'Colors:', [
	'r' => 'red',
	'g' => 'green',
	'b' => 'blue',
]);
```

Παραδίδουμε τον πίνακα των στοιχείων ως τρίτη παράμετρο ή με τη μέθοδο `setItems()`.

Μπορείτε να χρησιμοποιήσετε `setDisabled(['r', 'g'])` για να απενεργοποιήσετε μεμονωμένα στοιχεία.

Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και ότι τα επιλεγμένα στοιχεία είναι πράγματι ένα από τα προσφερόμενα και δεν έχουν απενεργοποιηθεί. Η μέθοδος `getRawValue()` μπορεί να χρησιμοποιηθεί για να ανακτήσετε τα προσφερόμενα στοιχεία χωρίς αυτόν τον σημαντικό έλεγχο.

Όταν ορίζονται προεπιλεγμένες τιμές, ελέγχει επίσης ότι είναι ένα από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο `checkDefaultValue(false)`.

Εάν υποβάλετε μια φόρμα χρησιμοποιώντας τη μέθοδο `GET`, μπορείτε να επιλέξετε μια πιο συμπαγή μέθοδο μεταφοράς δεδομένων που εξοικονομεί το μέγεθος της συμβολοσειράς ερωτημάτων. Αυτό ενεργοποιείται με τη ρύθμιση του χαρακτηριστικού HTML της φόρμας:

```php
$form->setHtmlAttribute('data-nette-compact');
```


addRadioList(string|int $name, $label=null, array $items=null): RadioList .[method]
===================================================================================

Προσθέτει κουμπιά επιλογής (κλάση [RadioList |api:Nette\Forms\Controls\RadioList]). Επιστρέφει το κλειδί του επιλεγμένου στοιχείου ή `null` αν ο χρήστης δεν επέλεξε τίποτα. Η μέθοδος `getSelectedItem()` επιστρέφει μια τιμή αντί για ένα κλειδί.

```php
$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): SelectBox .[method]
================================================================================

Προσθέτει πλαίσιο επιλογής (κλάση [SelectBox |api:Nette\Forms\Controls\SelectBox]). Επιστρέφει το κλειδί του επιλεγμένου στοιχείου ή `null` αν ο χρήστης δεν επέλεξε τίποτα. Η μέθοδος `getSelectedItem()` επιστρέφει μια τιμή αντί για ένα κλειδί.

```php
$countries = [
	'CZ' => 'Czech republic',
	'SK' => 'Slovakia',
	'GB' => 'United Kingdom',
];

$form->addSelect('country', 'Country:', $countries)
	->setDefaultValue('SK');
```

Περνάμε τον πίνακα των στοιχείων ως τρίτη παράμετρο ή με τη μέθοδο `setItems()`. Ο πίνακας στοιχείων μπορεί επίσης να είναι δισδιάστατος:

```php
$countries = [
	'Europe' => [
		'CZ' => 'Czech republic',
		'SK' => 'Slovakia',
		'GB' => 'United Kingdom',
	],
	'CA' => 'Canada',
	'US' => 'USA',
	'?'  => 'other',
];
```

Για πλαίσια επιλογής, το πρώτο στοιχείο έχει συχνά ιδιαίτερη σημασία, χρησιμεύει ως κλήση προς δράση. Χρησιμοποιήστε τη μέθοδο `setPrompt()` για να προσθέσετε μια τέτοια εγγραφή.

```php
$form->addSelect('country', 'Country:', $countries)
	->setPrompt('Pick a country');
```

Μπορείτε να χρησιμοποιήσετε `setDisabled(['CZ', 'SK'])` για να απενεργοποιήσετε μεμονωμένα στοιχεία.

Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και ότι το επιλεγμένο στοιχείο είναι πράγματι ένα από τα προσφερόμενα και δεν έχει απενεργοποιηθεί. Η μέθοδος `getRawValue()` μπορεί να χρησιμοποιηθεί για την ανάκτηση του προσφερόμενου στοιχείου χωρίς αυτόν τον σημαντικό έλεγχο.

Όταν έχει οριστεί η προεπιλεγμένη τιμή, ελέγχει επίσης ότι είναι ένα από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο `checkDefaultValue(false)`.


addMultiSelect(string|int $name, $label=null, array $items=null): MultiSelectBox .[method]
==========================================================================================

Προσθέτει πλαίσιο επιλογής πολλαπλών επιλογών (κλάση [MultiSelectBox |api:Nette\Forms\Controls\MultiSelectBox]). Επιστρέφει τον πίνακα των κλειδιών των επιλεγμένων στοιχείων. Η μέθοδος `getSelectedItems()` επιστρέφει τιμές αντί για κλειδιά.

```php
$form->addMultiSelect('countries', 'Countries:', $countries);
```

Παραδίδουμε τον πίνακα των στοιχείων ως τρίτη παράμετρο ή με τη μέθοδο `setItems()`. Ο πίνακας στοιχείων μπορεί επίσης να είναι δισδιάστατος.

Μπορείτε να χρησιμοποιήσετε `setDisabled(['CZ', 'SK'])` για να απενεργοποιήσετε μεμονωμένα στοιχεία.

Το στοιχείο ελέγχει αυτόματα ότι δεν έχει γίνει πλαστογράφηση και ότι τα επιλεγμένα στοιχεία είναι πράγματι ένα από τα προσφερόμενα και δεν έχουν απενεργοποιηθεί. Η μέθοδος `getRawValue()` μπορεί να χρησιμοποιηθεί για να ανακτήσετε τα προσφερόμενα στοιχεία χωρίς αυτόν τον σημαντικό έλεγχο.

Όταν ορίζονται προεπιλεγμένες τιμές, ελέγχει επίσης ότι είναι ένα από τα προσφερόμενα στοιχεία, διαφορετικά πετάει μια εξαίρεση. Αυτός ο έλεγχος μπορεί να απενεργοποιηθεί με τη μέθοδο `checkDefaultValue(false)`.


addUpload(string|int $name, $label=null): UploadControl .[method]
=================================================================

Προσθέτει πεδίο μεταφόρτωσης αρχείων (κλάση [UploadControl |api:Nette\Forms\Controls\UploadControl]). Επιστρέφει το αντικείμενο [FileUpload |http:request#FileUpload], ακόμη και αν ο χρήστης δεν έχει ανεβάσει αρχείο, κάτι που μπορεί να διαπιστωθεί από τη μέθοδο `FileUpload::hasFile()`.

```php
$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` ανιχνεύουν τον απαιτούμενο τύπο αρχείου ή εικόνας από την υπογραφή του. Η ακεραιότητα ολόκληρου του αρχείου δεν ελέγχεται. Μπορείτε να διαπιστώσετε αν μια εικόνα δεν είναι κατεστραμμένη, για παράδειγμα, προσπαθώντας να [τη φορτώσετε |http:request#toImage].


addMultiUpload(string|int $name, $label=null): UploadControl .[method]
======================================================================

Προσθέτει πεδίο μεταφόρτωσης πολλαπλών αρχείων (κλάση [UploadControl |api:Nette\Forms\Controls\UploadControl]). Επιστρέφει έναν πίνακα αντικειμένων [FileUpload |http:request#FileUpload]. Η μέθοδος `FileUpload::hasFile()` θα επιστρέψει `true` για κάθε ένα από αυτά.

```php
$form->addMultiUpload('files', 'Files:')
	->addRule($form::MaxLength, 'A maximum of %d files can be uploaded', 10);
```

Εάν ένα από τα αρχεία δεν μπορέσει να φορτωθεί σωστά, η φόρμα δεν υποβλήθηκε με επιτυχία και εμφανίζεται ένα σφάλμα. Δηλαδή, δεν είναι απαραίτητο να ελεγχθεί η μέθοδος `FileUpload::isOk()`.

Μην εμπιστεύεστε τα αρχικά ονόματα αρχείων που επιστρέφονται από τη μέθοδο `FileUpload::getName()`, ένας πελάτης θα μπορούσε να στείλει ένα κακόβουλο όνομα αρχείου με σκοπό να καταστρέψει ή να χακάρει την εφαρμογή σας.

Οι κανόνες `MimeType` και `Image` ανιχνεύουν τον απαιτούμενο τύπο αρχείου ή εικόνας από την υπογραφή του. Η ακεραιότητα ολόκληρου του αρχείου δεν ελέγχεται. Μπορείτε να διαπιστώσετε αν μια εικόνα δεν είναι κατεστραμμένη, για παράδειγμα, προσπαθώντας να [τη φορτώσετε |http:request#toImage].


addDate(string|int $name, $label=null): DateTimeControl .[method]{data-version:3.1.14}
======================================================================================

Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα μια ημερομηνία που αποτελείται από έτος, μήνα και ημέρα (κλάση [DateTimeControl |api:Nette\Forms\Controls\DateTimeControl]).

Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν το `DateTimeInterface`, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που αντιπροσωπεύει ένα UNIX timestamp. Το ίδιο ισχύει και για τα ορίσματα των κανόνων `Min`, `Max` ή `Range`, τα οποία καθορίζουν την ελάχιστη και τη μέγιστη επιτρεπόμενη ημερομηνία.

```php
$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()`, μπορείτε να καθορίσετε μια [μορφή κειμένου |https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters] ή μια χρονοσφραγίδα:

```php
$form->addDate('date', 'Date:')
	->setFormat('Y-m-d');
```


addTime(string|int $name, $label=null, bool $withSeconds = false): DateTimeControl .[method]{data-version:3.1.14}
=================================================================================================================

Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα την ώρα που αποτελείται από ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση [DateTimeControl |api:Nette\Forms\Controls\DateTimeControl]).

Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν το `DateTimeInterface`, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που αντιπροσωπεύει μια χρονοσφραγίδα UNIX. Χρησιμοποιείται μόνο η πληροφορία της ώρας από αυτές τις εισόδους- η ημερομηνία αγνοείται. Το ίδιο ισχύει και για τα ορίσματα των κανόνων `Min`, `Max` ή `Range`, τα οποία καθορίζουν τον ελάχιστο και μέγιστο επιτρεπόμενο χρόνο. Εάν η ελάχιστη τιμή που έχει οριστεί είναι μεγαλύτερη από τη μέγιστη, δημιουργείται ένα χρονικό εύρος που εκτείνεται μέχρι τα μεσάνυχτα.

```php
$form->addTime('time', 'Time:', withSeconds: true)
	->addRule($form::Range, 'Time must be between %d and %d.', ['12:30', '13:30']);
```

Από προεπιλογή, επιστρέφει ένα αντικείμενο `DateTimeImmutable` (με ημερομηνία 1 Ιανουαρίου, έτος 1). Χρησιμοποιώντας τη μέθοδο `setFormat()`, μπορείτε να καθορίσετε μια [μορφή κειμένου |https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters]:

```php
$form->addTime('time', 'Time:')
	->setFormat('H:i');
```


addDateTime(string|int $name, $label=null, bool $withSeconds = false): DateTimeControl .[method]{data-version:3.1.14}
=====================================================================================================================

Προσθέτει ένα πεδίο που επιτρέπει στο χρήστη να εισάγει εύκολα τόσο ημερομηνία όσο και ώρα που αποτελείται από έτος, μήνα, ημέρα, ώρες, λεπτά και προαιρετικά δευτερόλεπτα (κλάση [DateTimeControl |api:Nette\Forms\Controls\DateTimeControl]).

Για την προεπιλεγμένη τιμή, δέχεται είτε αντικείμενα που υλοποιούν το `DateTimeInterface`, ένα αλφαριθμητικό με την ώρα, είτε έναν αριθμό που αντιπροσωπεύει ένα UNIX timestamp. Το ίδιο ισχύει και για τα ορίσματα των κανόνων `Min`, `Max` ή `Range`, τα οποία καθορίζουν την ελάχιστη και τη μέγιστη επιτρεπόμενη ημερομηνία.

```php
$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()`, μπορείτε να καθορίσετε μια [μορφή κειμένου |https://www.php.net/manual/en/datetime.format.php#refsect1-datetime.format-parameters] ή μια χρονοσφραγίδα:

```php
$form->addDateTime('datetime')
	->setFormat(DateTimeControl::FormatTimestamp);
```


addColor(string|int $name, $label=null): ColorPicker .[method]{data-version:3.1.14}
===================================================================================

Προσθέτει ένα πεδίο επιλογής χρώματος (κλάση [ColorPicker |api:Nette\Forms\Controls\ColorPicker]). Το χρώμα είναι μια συμβολοσειρά στη μορφή `#rrggbb`. Εάν ο χρήστης δεν κάνει επιλογή, το προεπιλεγμένο χρώμα που επιστρέφεται είναι το μαύρο `#000000`.

```php
$form->addColor('color', 'Color:')
	->setDefaultValue('#3C8ED7');
```


addHidden(string|int $name, string $default=null): HiddenField .[method]
========================================================================

Προσθέτει κρυφό πεδίο (κλάση [HiddenField |api:Nette\Forms\Controls\HiddenField]).

```php
$form->addHidden('userid');
```

Χρησιμοποιήστε το `setNullable()` για να το αλλάξετε ώστε να επιστρέφει `null` αντί για κενό αλφαριθμητικό. Η [addFilter() |validation#Modifying Input Values] σας επιτρέπει να αλλάξετε την υποβαλλόμενη τιμή.

Παρόλο που το στοιχείο είναι κρυφό, είναι **σημαντικό να συνειδητοποιήσετε** ότι η τιμή του μπορεί να τροποποιηθεί ή να παραποιηθεί από έναν επιτιθέμενο. Πάντα να επαληθεύετε και να επικυρώνετε διεξοδικά όλες τις λαμβανόμενες τιμές στην πλευρά του διακομιστή για να αποφύγετε τους κινδύνους ασφαλείας που σχετίζονται με τη χειραγώγηση των δεδομένων.


addSubmit(string|int $name, $caption=null): SubmitButton .[method]
==================================================================

Προσθέτει κουμπί υποβολής (κλάση [SubmitButton |api:Nette\Forms\Controls\SubmitButton]).

```php
$form->addSubmit('submit', 'Register');
```

Είναι δυνατόν να υπάρχουν περισσότερα από ένα κουμπιά υποβολής στη φόρμα:

```php
$form->addSubmit('register', 'Register');
$form->addSubmit('cancel', 'Cancel');
```

Για να μάθετε ποιο από αυτά έγινε κλικ, χρησιμοποιήστε:

```php
if ($form['register']->isSubmittedBy()) {
  // ...
}
```

Εάν δεν θέλετε να επικυρώνετε τη φόρμα όταν πατάτε ένα κουμπί υποβολής (όπως τα κουμπιά *Ακύρωση* ή *Προεπισκόπηση*), μπορείτε να το απενεργοποιήσετε με την [setValidationScope() |validation#Disabling Validation].


addButton(string|int $name, $caption): Button .[method]
=======================================================

Προσθέτει κουμπί (κλάση [Button |api:Nette\Forms\Controls\Button]) χωρίς λειτουργία submit. Είναι χρήσιμο για τη σύνδεση άλλων λειτουργιών με το id, για παράδειγμα μια ενέργεια JavaScript.

```php
$form->addButton('raise', 'Raise salary')
	->setHtmlAttribute('onclick', 'raiseSalary()');
```


addImageButton(string|int $name, string $src=null, string $alt=null): ImageButton .[method]
===========================================================================================

Προσθέτει κουμπί υποβολής με τη μορφή εικόνας (κλάση [ImageButton |api:Nette\Forms\Controls\ImageButton]).

```php
$form->addImageButton('submit', '/path/to/image');
```

Όταν χρησιμοποιείτε πολλαπλά κουμπιά υποβολής, μπορείτε να μάθετε ποιο από αυτά έχει πατηθεί με την εντολή `$form['submit']->isSubmittedBy()`.


addContainer(string|int $name): Container .[method]
===================================================

Προσθέτει μια υπο-φόρμα (κλάση [Container |api:Nette\Forms\Container]), ή έναν περιέκτη, ο οποίος μπορεί να αντιμετωπιστεί με τον ίδιο τρόπο όπως μια φόρμα. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε μεθόδους όπως `setDefaults()` ή `getValues()`.

```php
$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:');
```

Τα δεδομένα που αποστέλλονται επιστρέφονται στη συνέχεια ως πολυδιάστατη δομή:

```php
[
	'first' => [
		'name' => /* ... */,
		'email' => /* ... */,
	],
	'second' => [
		'name' => /* ... */,
		'email' => /* ... */,
	],
]
```


Επισκόπηση των ρυθμίσεων .[#toc-overview-of-settings]
=====================================================

Για όλα τα στοιχεία μπορούμε να καλέσουμε τις ακόλουθες μεθόδους (δείτε την [τεκμηρίωση API |https://api.nette.org/forms/master/Nette/Forms/Controls.html] για μια πλήρη επισκόπηση):

.[table-form-methods language-php]
| `setDefaultValue($value)` | θέτει την προεπιλεγμένη τιμή
| `getValue()` | λήψη τρέχουσας τιμής
| `setOmitted()` | [παραλειπόμενες τιμές |#omitted values]
| `setDisabled()` | [απενεργοποίηση εισόδων |#disabling inputs]

Απόδοση:
.[table-form-methods language-php]
| `setCaption($caption)`| αλλαγή της λεζάντας του στοιχείου
| `setTranslator($translator)` | Ορισμός [μεταφραστή |rendering#translating]
| `setHtmlAttribute($name, $value)` | ορίζει το [χαρακτηριστικό HTML |rendering#HTML attributes] του στοιχείου
| `setHtmlId($id)` | ορίζει το χαρακτηριστικό HTML `id`
| `setHtmlType($type)` | ορίζει το χαρακτηριστικό HTML `type`
| `setHtmlName($name)`| ορίζει το χαρακτηριστικό HTML `name`
| `setOption($key, $value)` | ορίζει [δεδομένα απόδοσης |rendering#Options]

Επικύρωση:
.[table-form-methods language-php]
| `setRequired()` | [υποχρεωτικό πεδίο |validation]
| `addRule()` | set [validation rule |validation#Rules]
| `addCondition()`, `addConditionOn()` | set [validation condition |validation#Conditions]
| `addError($message)`| [περνώντας μήνυμα σφάλματος |validation#processing-errors]

Οι ακόλουθες μέθοδοι μπορούν να κληθούν για τα στοιχεία `addText()`, `addPassword()`, `addTextArea()`, `addEmail()`, `addInteger()`:

.[table-form-methods language-php]
| `setNullable()`| καθορίζει αν η getValue() επιστρέφει `null` αντί για κενό αλφαριθμητικό.
| `setEmptyValue($value)` | ορίζει την ειδική τιμή που αντιμετωπίζεται ως κενή συμβολοσειρά
| `setMaxLength($length)`| ορίζει τον μέγιστο αριθμό επιτρεπόμενων χαρακτήρων
| `addFilter($filter)`| [τροποποίηση τιμών εισόδου |validation#Modifying Input Values]


Παραλειφθείσες τιμές .[#toc-omitted-values]
===========================================

Αν δεν σας ενδιαφέρει η τιμή που εισάγει ο χρήστης, μπορούμε να χρησιμοποιήσουμε το `setOmitted()` για να την παραλείψουμε από το αποτέλεσμα που παρέχεται από τη μέθοδο `$form->getValues​()` ή που περνάει στους χειριστές. Αυτό είναι κατάλληλο για διάφορους κωδικούς πρόσβασης για επαλήθευση, πεδία antispam κ.λπ.

```php
$form->addPassword('passwordVerify', 'Password again:')
	->setRequired('Fill your password again to check for typo')
	->addRule($form::Equal, 'Password mismatch', $form['password'])
	->setOmitted();
```


Απενεργοποίηση εισόδων .[#toc-disabling-inputs]
===============================================

Οι είσοδοι μπορούν να απενεργοποιηθούν χρησιμοποιώντας το `setDisabled()`. Ο χρήστης δεν μπορεί να επεξεργαστεί μια απενεργοποιημένη είσοδο.

```php
$form->addText('username', 'User name:')
	->setDisabled();
```

Οι απενεργοποιημένες είσοδοι δεν αποστέλλονται στον διακομιστή από το πρόγραμμα περιήγησης, επομένως δεν θα τις βρείτε στα δεδομένα που επιστρέφονται από τη λειτουργία `$form->getValues()`. Ωστόσο, αν ορίσετε το `setOmitted(false)`, η Nette θα συμπεριλάβει την προεπιλεγμένη τιμή τους σε αυτά τα δεδομένα.

Όταν καλείται η `setDisabled()`, **η τιμή της εισόδου διαγράφεται** για λόγους ασφαλείας. Εάν ορίζετε μια προεπιλεγμένη τιμή, είναι απαραίτητο να το κάνετε μετά την απενεργοποίησή της:

```php
$form->addText('username', 'User name:')
	->setDisabled()
	->setDefaultValue($userName);
```

Μια εναλλακτική λύση για τις απενεργοποιημένες εισόδους είναι τα πεδία με το χαρακτηριστικό HTML `readonly`, τα οποία αποστέλλονται στον διακομιστή από το πρόγραμμα περιήγησης. Αν και το πεδίο είναι μόνο αναγνώσιμο, είναι **σημαντικό να συνειδητοποιήσετε** ότι η τιμή του μπορεί να τροποποιηθεί ή να παραποιηθεί από έναν εισβολέα.


Προσαρμοσμένα στοιχεία ελέγχου .[#toc-custom-controls]
======================================================

Εκτός από το ευρύ φάσμα των ενσωματωμένων στοιχείων ελέγχου της φόρμας, μπορείτε να προσθέσετε προσαρμοσμένα στοιχεία ελέγχου στη φόρμα ως εξής:

```php
$form->addComponent(new DateInput('Date:'), 'date');
// εναλλακτική σύνταξη: Ημερομηνία:'),
```

.[note]
Η φόρμα είναι απόγονος της κλάσης [Container | component-model:#Container] και τα στοιχεία είναι απόγονοι της κλάσης [Component | component-model:#Component].

Υπάρχει τρόπος ορισμού νέων μεθόδων φόρμας για την προσθήκη προσαρμοσμένων στοιχείων (π.χ. `$form->addZip()`). Αυτές είναι οι λεγόμενες μέθοδοι επέκτασης. Το μειονέκτημα είναι ότι οι υποδείξεις κώδικα στους συντάκτες δεν θα λειτουργούν για αυτές.

```php
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:');
```


Πεδία χαμηλού επιπέδου .[#toc-low-level-fields]
===============================================

Για να προσθέσετε ένα στοιχείο στη φόρμα, δεν χρειάζεται να καλέσετε το `$form->addXyz()`. Αντ' αυτού, τα στοιχεία της φόρμας μπορούν να εισαχθούν αποκλειστικά σε πρότυπα. Αυτό είναι χρήσιμο εάν, για παράδειγμα, πρέπει να δημιουργήσετε δυναμικά στοιχεία:

```latte
{foreach $items as $item}
	<p><input type=checkbox name="sel[]" value={$item->id}> {$item->name}</p>
{/foreach}
```

Μετά την υποβολή, μπορείτε να ανακτήσετε τις τιμές:

```php
$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`, αν θέλετε να λαμβάνετε ασφαλή δεδομένα.

Έλεγχοι φόρμας

Επισκόπηση των ενσωματωμένων στοιχείων ελέγχου φόρμας.

addText(string|int $name, $label=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): TextInput

Προσθέτει πεδίο διεύθυνσης ηλεκτρονικού ταχυδρομείου με έλεγχο εγκυρότητας (κλάση TextInput). Αν ο χρήστης δεν συμπληρώσει το πεδίο, επιστρέφει ένα κενό αλφαριθμητικό '', ή χρησιμοποιεί το setNullable() για να το αλλάξει και να επιστρέφει null.

$form->addEmail('email', 'Email:');

Επαληθεύει ότι η τιμή είναι έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου. Δεν επαληθεύει ότι ο τομέας υπάρχει πραγματικά, μόνο η σύνταξη επαληθεύεται. Επικυρώνει αυτόματα UTF-8, κόβει τα αριστερά και δεξιά κενά.

Το μέγιστο μήκος μπορεί να περιοριστεί με τη χρήση του setMaxLength(). Η addFilter() σας επιτρέπει να αλλάξετε την τιμή που εισάγει ο χρήστης. Μπορείτε να ορίσετε τη λεγόμενη κενή τιμή χρησιμοποιώντας το setEmptyValue().

addPassword(string|int $name, $label=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): 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): 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, αν θέλετε να λαμβάνετε ασφαλή δεδομένα.