Validacni pravidlo s vice argumenty

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

Ahoj…
Resim takovy problem s vlastnim validacnim pravidlem.
Problem:
Mam formular pridani uzivatele a validacni pravidlo pro unikatni login a email, ktery vytahnu po odeslani z databaze.

<?php
	$form->addText('login', 'Přihlašovací jméno: ')->addRule(callback($this,'LoginValidation'), 'uzivatelske jmeno se nachazi v db, zadejte jine');
//...

//validace
 public function LoginValidation($input) {
        $login = $input->getValue();
        $data = $this->usersRepository->getUsersList(array('login' => $login));

	if( !count($data)) {
	    return true;
	}
	else {
	    return false;
	}

    }
?>

Tady vse funguje jak ma :)

Problem ale nastane, kdyz chci editovat, jiz zapsaneho uzivatele. Mam hidden policko „u_id“ a potrebuji upravit validacni pravidlo tak, aby bralo v potaz i hodnotu v policku ‚u_id‘ a ja mohl upravit dotaz pro SQL, resp. jak poslat hodnotu ‚u_id‘ do validacniho pravidla.

Mam jiz naplneny formular daty z databaze:

<?php
	$form->addHidden('u_id');
	//a ted neco jako:
	$form->addText('login', 'Přihlašovací jméno: ')->addRule(callback($this,$u_id,'EditLoginValidation'), 'uzivatelske jmeno se nachazi v db, zadejte jine');
//...

//validace pak neco jako:
public function EditLoginValidation($input, $u_id) {
        $data = $this->usersRepository->getUsersList(array('login' => $login, 'u_id != ?' => $u_id));
	//atd...
    }
?>

A ted babo rad :)

enumag
Člen | 2118
+
0
-
$form->addText('login', 'Přihlašovací jméno: ')->addRule(function ($input) use ($u_id) {
	$this->EditLoginValidation($input, $u_id);
}, 'uzivatelske jmeno se nachazi v db, zadejte jine');
kreed
Člen | 13
+
0
-

A jak pristoupim k tem datum z formulare? Ty promenne byly spis ilustrativni. Data jsou jen ve formulari… Zkousel jsem tvou variantu a nejde, resp. to hlasi ze $input a $u_id neni definovan.
Takze jeste jednou:

<?php
$form->addHidden('u_id');
$form->addText('login', 'Přihlašovací jméno: ')->addRule(function ($input) use ($u_id) {
    $this->EditLoginValidation($input, $u_id); //mozna ($this, $form['u_id']), ale to taky nejde
}, 'uzivatelske jmeno se nachazi v db, zadejte jine');

public function EditLoginValidation($input, $u_id) {
        $data = $this->usersRepository->getUsersList(array('login' => $login, 'u_id != ?' => $u_id));
    //atd...
}
?>

Editoval kreed (10. 3. 2014 9:10)

enumag
Člen | 2118
+
0
-

Doporučuji dokumentaci PHP, konkrétně Closures popřípadě fórum http://diskuse.jakpsatweb.cz/.