Vlastne validacne pravidlo pre datumovnik
- Juraj_
- Člen | 22
Ahojte, vztvoril som si vlastne pravidlo na zadanie datumu vacsieho ako dnesny, ale nefunguje mi javascript. Ked pouzijem napriklad:
->addRule(self::INTEGER, 'Váha musí byť číslo')
Cela validacia prebehne vporiadku aj s alertom, ale pri vlastnom mi len vytvori
<span class='error'>message...</span>
Neviete v com by mohol byt problem? Preco pri vlastnom pravidle mi nevybehne alert okno?
$this->addText('weight', 'Váha (kg)')
->addRule(self::INTEGER, 'Váha musí byť číslo')
->addRule(self::RANGE, 'Váha musí byť od 1 do 1000', array(1, 1000))
->setRequired();
$this->addDate('date', 'Dátum doručenia')
->addRule(function($item) {
if ($item->value > new DateTime())
{
return true;
}
return false;
}, 'Zadali ste nevalidný dátum')
->setRequired();
- David Matějka
- Moderator | 6445
jelikoz ta validacni funkce nema v JS ekvivalentni validator. A s closurou to nepujde, musi to byt funkce nebo staticka metoda. Mrkni do doc: https://doc.nette.org/cs/forms#…
- Juraj_
- Člen | 22
Postupoval som podla tohoto(https://doc.nette.org/…s/validation), ale hadze mi to:
Unknown validator ‚ProductFormRules::validateDate‘ for control ‚date‘.
Nemas prosimta nejaku ukazku podla ktorej by som si to spojazdnil? Dakujem
- Juraj_
- Člen | 22
Nie hodil som ju do formu:
<?php
namespace FrontModule\Forms;
use FRI\Application\UI\Form,
\Nette\Utils\DateTime;
final class ProductForm extends Form
{
const PRIORITY = array(
1 => '1',
2 => '2',
3 => '3',
4 => '4',
5 => '5',
);
private $cities;
public function __construct($cities)
{
parent::__construct();
$this->cities = $cities;
}
/**
* @param Nette\Application\UI\Presenter $presenter
*/
protected function configure(\Nette\Application\UI\Presenter $presenter)
{
parent::configure($presenter);
$this->addText('name', 'Názov produktu')
->setRequired();
$this->addText('amount', 'Počet')
->addRule(self::INTEGER, 'Počet musí byť číslo')
->addRule(self::RANGE, 'Počet musí byť od 1 do 1000000', array(1, 1000000))
->setRequired();
$this->addText('size', 'Veľkosť (m³)')
->addRule(self::INTEGER, 'Veľkosť musí byť číslo')
->addRule(self::RANGE, 'Veľkosť musí byť od 1 do 100', array(1, 100))
->setRequired();
$this->addText('weight', 'Váha (kg)')
->addRule(self::INTEGER, 'Váha musí byť číslo')
->addRule(self::RANGE, 'Váha musí byť od 1 do 1000', array(1, 1000))
->setRequired();
$this->addDate('date', 'Dátum doručenia')
->addRule(ProductFormRules::DATE, 'Zadali ste nevalidný dátum')
->setRequired();
$this->addSelect('from', 'Doručenie z mesta')
->setItems($this->cities)
->setRequired();
$this->addSelect('to', 'Doručenie do mesta')
->setItems($this->cities)
->setRequired();
$this->addSelect('priority', 'Priorita', self::PRIORITY)
->setPrompt('Vyberte prosím')
->setRequired();
$this->addTextArea('info', 'Informácie o produkte');
}
}
class ProductFormRules
{
const DATE = 'ProductFormRules::validateDate';
public static function validateDate(IControl $control)
{
dump($control);die();
}
}
- Juraj_
- Člen | 22
Vytvoril som si v Admin/Forms novu triedu:
use Nette\Utils\DateTime;
class ProductFormRules
{
const DATE = 'ProductFormRules::validateDate';
public static function validateDate($form)
{
if($form->value > new DateTime()) return true;
return false;
}
}
kontrola mi vsak funguje rovnako, nevybehne javascript, ale sa mi len pod polickom zobrazi
<span class="error"> Zadali ste nevalidný dátum </span>
pritom som do netteForms.js pridal
Nette.validators.ProductFormRules_validateDate = function (elem, arg, value) {
alert('asd');
};
Ako by sa mal nazvat validator? Podla navodu si myslim ze to mam spravne…