Ověření existence uživatelského jména
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravím.
Opět zápasím s Nette :)
Mám formulář ve kterém se snažím kontrolovat existenci
uživatelského jména:
protected function userForm() {
$form = new Form();
$form->addText('nick', 'Nick')
->addRule(callback($this, 'isNickAvailable'), 'Zadané uživatelské jméno již existuje');
$form->addText('email', 'Email');
$form->addPassword('password', 'Heslo');
...
return $form;
}
public function isNickAvailable( $form )
{
echo $form["nick"]->getValue();
$result = $this->context->createUsers()->where(array(
'nick' => $form["nick"]->getValue()))->limit(1)->fetch();
if ($result !== FALSE && !$result->nick)
{
return true;
}
else
{
return false;
}
}
Ovšem nedokážu v metodě získat data z odeslaného formuláře (stačil je jen ten nick). Nyní mi to píše chybu:
Cannot use object of type Nette\Forms\Controls\TextInput as array
na řádku:
echo $form[„nick“]->getValue();
Nevěděl by prosím někdo jak získat hodnotu, a zda postupuji správným směrem při ověřování uživatelského jména, nebo na to existuje něco použitelnějšího?
Děkuji
- jtousek
- Člen | 951
Podle všeho má proměnná $form typ Nette\Forms\Controls\TextInput, tzn. není to formulář ale přímo ten element. Takže takhle:
public function isNickAvailable( $nick)
{
echo $nick->getValue();
$result = $this->context->createUsers()->where(array(
'nick' => $nick->getValue()))->limit(1)->fetch();
if ($result !== FALSE && !$result->nick)
{
return true;
}
else
{
return false;
}
}