Globální validace ve formuláři
- Sievert
- Člen | 3
Ahoj,
potřebuji nějakým způsobem vymyslet jak realizovat globální validace na formulářích, tak aby nebylo potřeba každou validaci samostatně ve formuláři vpisovat.
Příklad: Mám pole telefon a realizuji na něm 3 validace… pole telefon se však vyskytuje na x-místech v projektu a nechci zbytečně neustále dokola vpisovat do kódu ty samé validace.
Je nějaká možnost, vytvořit něco jako globální validaci a pak na ni
jen u jednotlivých polích ve formuláři odkazovat? Tímhle způsobem bych si
rád vytvořil sadu pár validací a pak je používal napříč projektem.
Děkuji!
->setRequired('records.required_field')
->setEmptyValue('global.phone_preselection')
->addRule($form::PATTERN, 'global.enter_number', '.*[0-9].*')
->addRule($form::MAX_LENGTH, 'global.max_number', 15)
->addRule($form::MIN_LENGTH, 'global.min_number', 7);
- Pavel Kravčík
- Člen | 1196
Jednou z možností je rozšířit si formulář o pole typu
->addPhone()
, která má ty validace v sobě. Stačí, když ta
třída bude dědit nějaký BaseControl
z formuláře.
- Marek Bartoš
- Nette Blogger | 1280
Třeba takto.
use Nette\Forms\Controls\TextInput;
use Nette\Forms\Form;
class PhoneInput extends TextInput
{
public function __construct(?string $label = null)
{
parent::__construct($label);
$this->setRequired('records.required_field')
->setEmptyValue('global.phone_preselection')
->addRule(Form::PATTERN, 'global.enter_number', '.*[0-9].*')
->addRule(Form::MAX_LENGTH, 'global.max_number', 15)
->addRule(Form::MIN_LENGTH, 'global.min_number', 7);
}
}
$form = new Form();
$form['phone'] = new PhoneInput();
$form->addComponent(new PhoneInput(), 'phone');
Editoval Mabar (25. 2. 2021 14:26)