Globální validace ve formuláři

Sievert
Člen | 3
+
0
-

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
+
0
-

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.

Sievert
Člen | 3
+
0
-

Pavel Kravčík napsal(a):

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.

Mohu požádat o nějaký konkrétní příklad? Děkuji!

Editoval Sievert (25. 2. 2021 14:19)

Marek Bartoš
Nette Blogger | 1280
+
+3
-

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)