Duplicita formulářových prvků

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Facedown
Člen | 38
+
0
-

Ahoj, chtěl bych se zeptat, jak se dá řešit duplicita formulářových prvků.

Dejme tomu, že třeba pro heslo mám vymezenou minimální velikost 6 znaků. Tento prvek se mi opakuje při registraci, přihlášení nebo třeba při změně hesla. Všude chci dodržet ty stejná pravidla.

Napadlo mě, že bych si mohl vracet upravenou Nette\Forms\Controls\TextInput, nebo si tyto pravidla nějak zapsat do konfiguračního souboru, ale nevím jestli zde není jiné a lepší řešení. Jak podobnou situaci řešíte vy?

Děkuji za odpověď.

h4kuna
Backer | 740
+
+1
-

Ahoj,
Tento článek by ti mohl pomoci.

Rychlá ukázka:

<?php
use Nette\Forms;


class PasswordInput extends Forms\Controls\TextInput
{
	public function __construct($label = NULL)
	{
		parent::__construct($label);
		$this->setType('password');
		$this->addRule(Forms\Form::MIN_LENGTH, 'Minimální délka hesla je %s znaků.', 6);
	}

}

$form['password'] = new PasswordInput('Heslo');
?>

Nebo mít nějakou třídu na tvoření prvků, když by jsi potřeboval nějaký závislosti. Na datech z databáze, třeba seznam států.

<?php
use Nette\Forms;


class FormFieldFactory
{
	/** @var CountryRepository */
	private $countryRepositry;


	public function __construct(CountryRepository $countryRepositry)
	{
		$this->countryRepositry = $countryRepositry;
	}


	public function createCountryInput($label = NULL)
	{
		$items = $this->countryRepositry->getListCountries();
		$input = new Forms\Controls\SelectBox($label, $items);
		$input->setPrompt('-- vyberte stát --');
		return $input;
	}


	public function createPassword($label = NULL)
	{
		$input = new Forms\Controls\TextInput($label);
		$input->setType('password');
		$input->addRule(Forms\Form::MIN_LENGTH, 'Minimální délka hesla je %s znaků', 6);
		return $input;
	}

}


$form['country'] = $this->formFieldFactory->createCountryInput('Město');
?>

Editoval h4kuna (15. 7. 2015 10:15)

Facedown
Člen | 38
+
0
-

Super, díky moc za radu.