Lisiace sa validacne pravidla pre pridanie zaznamu a upravu zaznamu

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

Pri pridavani zaznamu je heslo povinne, tym padom aj overenie hesla. Pri upravovani ale v pripade, ze nevypni heslo, ponecha sa povodne. Jedine ak ho vyplni, az potom pride na rad porovnanie s kontrolou. Ale do jedneho zapisu som to nevedel dat. Je to mozne nejako inak ?

if ( $id == 0) {
	$form->addPassword( 'password', 'Heslo:')
		->addRule(Form::FILLED, 'Zadajte heslo');

	$form->addPassword( 'password2', 'Overenie hesla:')
		->addRule(Form::FILLED, 'Zadajte overenie hesla')
    		->addConditionOn($form['password'], Form::FILLED)
		        ->addRule( Form::EQUAL, 'Obe zadané heslá sa musia zhodovať', $form['password']);
}
else
{
	$form->addPassword( 'password', 'Heslo:');

	$form->addPassword( 'password2', 'Overenie hesla:')
		->addConditionOn($form['password'], Form::FILLED)
	        ->addRule( Form::EQUAL, 'Obe zadané heslá sa musia zhodovať', $form['password']);
}
David Grudl
Nette Core | 8147
+
0
-

Možná by bylo srozumitelnější oddělit pravidla od definice formuláře.

$form->addPassword( 'password', 'Heslo:');
$form->addPassword( 'password2', 'Overenie hesla:');

if ( $id == 0) {
        $form['password']
                ->addRule(Form::FILLED, 'Zadajte heslo');

        $form['password2']
                ->addRule(Form::FILLED, 'Zadajte overenie hesla')
                ->addConditionOn($form['password'], Form::FILLED)
                        ->addRule( Form::EQUAL, 'Obe zadané heslá sa musia zhodovať', $form['password']);
}
else
{
        $form['password2']
                ->addConditionOn($form['password'], Form::FILLED)
                ->addRule( Form::EQUAL, 'Obe zadané heslá sa musia zhodovať', $form['password']);
}
edke
Člen | 198
+
0
-

Ano, to mi je zrejme, samozrejme sa chcem vyhnut dvojitemu pisaniu a hlavne ako si povedal, odelit definiciu od pravidiel.

Ja som ale skusal skor nieco taketo, ale to zjavne nebude fungovat, pretoze podmienky v pravidlach pracuju len s objektami formulara (interface IFormControl):

public function actionForm( $id = 0 ) {
	$form = new AppForm($this, 'form');

	...

	$form->addText( 'login', 'Login:')
		->addConditionOn( $id, ~Form::EQUAL, 0)
David Grudl
Nette Core | 8147
+
0
-

Leda pokud by to $id bylo ve skrytém poli ($form->addHidden('id'))…