%PDF- %PDF-
Direktori : /proc/985914/root/www/varak.net/losik.varak.net/vendor/nette/forms/examples/ |
Current File : //proc/985914/root/www/varak.net/losik.varak.net/vendor/nette/forms/examples/custom-control.php |
<?php /** * Nette Forms custom control example. */ declare(strict_types=1); if (@!include __DIR__ . '/../vendor/autoload.php') { die('Install packages using `composer install`'); } use Nette\Forms\Form; use Nette\Forms\Helpers; use Nette\Utils\Html; class DateInput extends Nette\Forms\Controls\BaseControl { /** @var string */ private $day = ''; private $month = ''; private $year = ''; public function __construct($label = null) { parent::__construct($label); $this->addRule([self::class, 'validateDate'], 'Date is invalid.'); } public function setValue($value) { if ($value === null) { $this->day = $this->month = $this->year = ''; } else { $date = Nette\Utils\DateTime::from($value); $this->day = $date->format('j'); $this->month = $date->format('n'); $this->year = $date->format('Y'); } return $this; } public function getValue(): ?DateTimeImmutable { return self::validateDate($this) ? (new DateTimeImmutable)->setDate((int) $this->year, (int) $this->month, (int) $this->day)->setTime(0, 0) : null; } public function isFilled(): bool { return $this->day !== '' || $this->year !== ''; } public function loadHttpData(): void { $this->day = $this->getHttpData(Form::DataLine, '[day]'); $this->month = $this->getHttpData(Form::DataLine, '[month]'); $this->year = $this->getHttpData(Form::DataLine, '[year]'); } /** * Generates control's HTML element. */ public function getControl() { $name = $this->getHtmlName(); return Html::el('input', [ 'name' => $name . '[day]', 'id' => $this->getHtmlId(), 'value' => $this->day, 'type' => 'number', 'min' => 1, 'max' => 31, 'data-nette-rules' => Helpers::exportRules($this->getRules()) ?: null, ]) . Helpers::createSelectBox( [1 => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [], $this->month )->name($name . '[month]') . Html::el('input', [ 'name' => $name . '[year]', 'value' => $this->year, 'type' => 'number', ]); } public static function validateDate(Nette\Forms\Control $control): bool { return ctype_digit($control->day) && ctype_digit($control->month) && ctype_digit($control->year) && checkdate((int) $control->month, (int) $control->day, (int) $control->year); } } Tracy\Debugger::enable(); $form = new Form; $form['date'] = new DateInput('Date:'); $form['date']->setDefaultValue(new DateTime); $form->addSubmit('submit', 'Send'); if ($form->isSuccess()) { echo '<h2>Form was submitted and successfully validated</h2>'; Tracy\Dumper::dump($form->getValues()); exit; } ?> <!DOCTYPE html> <meta charset="utf-8"> <title>Nette Forms custom control example</title> <link rel="stylesheet" media="screen" href="assets/style.css" /> <script src="https://nette.github.io/resources/js/3/netteForms.js"></script> <h1>Nette Forms custom control example</h1> <?php $form->render() ?> <footer><a href="https://doc.nette.org/en/forms">see documentation</a></footer>