Zavolání vlastní validační funkce z modelu
- Croc
- Člen | 270
Ahoj,
mám takový rychlý dotaz.
forms/
RegisterFormFactory.php – formulář kde potřebuji zavolat
isEmailAvailable
$form->addText('username', 'E-mail: *', 35)
->setEmptyValue('@')
->addRule(Form::FILLED, 'Vyplňte Váš email')
->addCondition(Form::FILLED)
->addRule(Form::EMAIL, 'Neplatná emailová adresa')
->addRule(callback($this, 'isEmailAvailable'), 'E-mailová adresa je již použita.');
model/
UserManager.php – zde je funkce umístěna
/**
* Check if the email is used.
* @param string
* @return bool
*/
public function isEmailAvailable($username)
{
return ! $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();
}
presenters/
RegisterPresenter.php – zde zobrazuji formulář
/**
* Register form factory.
* @return Nette\Application\UI\Form
*/
protected function createComponentRegisterForm() {
$form = $this->factory->create();
$form->onSuccess[] = function ($form) {
$form->getPresenter()->redirect('Homepage:');
};
return $form;
}
V Nette jsem začátečník a nevím jak funkci isEmailAvailable zavolat z modelu. Díky moc
Editoval Croc (16. 4. 2015 19:27)
- Kori
- Člen | 73
Do factory si predej UserManager a pak v rule zavolej
$form->addText('username', 'E-mail: *', 35)
....
->addRule($this->userManager->isEmailAvailable, 'E-mailová adresa je již použita.')
Do funkce isEmailAvailable se predava formularovy prvek, takze si uprav podminku na where(self::COLUMN_NAME, $username->value), resp. bych to nazval nejak jinak ;-)
- David Matějka
- Moderator | 6445
@Šaman je tam statika, takze radsi ne
@Kori tim bude zbytecne ta fce vyzadovat control
injectni si UserManager, jak radi Kori, ale kontrolu proved takto:
->addRule(function ($control) {
return $this->userManager->isEmailAvailable($control->value);
}, ...)
- David Matějka
- Moderator | 6445
@Croc v tom od Kori musi ta metoda v modelu pocitat s tim, ze
prijme control – tudiz tam musis napsat $username->value
,
v tom mem rovnou predavam tu hodnotu jako retezec
- Šaman
- Člen | 2666
Jdu se zahrabat a zasypat vápnem…
Jasně, už jsem zapomněl, že to chtěl validovat proti databázi. Takže
statika tady opravdu ne. Ale dá se použít podle stejného návodu i cokoliv
callable – čímž se spolu s anonymní fcí dostáváme k tomu, co jsi
psal ty jako asi nejlepší řešení.
Editoval Šaman (16. 4. 2015 21:34)