Accessing methods as properties via $obj->isEmailAvailable is deprecated

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

Zdravím,

jak v Nette 2.4 kontrolovat zda email je již zaregistrovaný v DB?
Toto mi hlásí chybu Accessing methods as properties via $obj->isEmailAvailable is deprecated

protected function createComponentRegForm()
{
    $form = new Form;

    $form->addText('email', 'E-mail:')
        ->setType('email')
        ->addRule( $this->isEmailAvailable, 'Email je již zaregistrovaný!' );
    //...
    $form->onSuccess[] = $this->regFormSucceeded;

    return $form;
}

public function isEmailAvailable( $email )
{
    $row = $this->modelReg->findByEmail( $email->value );
    return ($row == FALSE);
}
newPOPE
Člen | 648
+
-1
-

Mozno callbackom

	...
	->addRule(
		function(TextInput $control) {
			return $this->isEmailAvailable($control->getValue())
		},
		'Email je již zaregistrovaný!'
	);
CZechBoY
Člen | 3608
+
+4
-

Nebo php callbackem

protected function createComponentRegForm()
{
    $form = new Form;

    $form->addText('email', 'E-mail:')
        ->setType('email')
        ->addRule([$this, 'isEmailAvailable'], 'Email je již zaregistrovaný!' );
    //...
    $form->onSuccess[] = $this->regFormSucceeded;

    return $form;
}

public function isEmailAvailable( $email )
{
    $row = $this->modelReg->findByEmail( $email->value );
    return ($row == FALSE);
}
Lukes
Silver Partner | 68
+
0
-

Jak píšou kolegové výše od 2.4 jsou method gettery deprecated viz https://forum.nette.org/…thod-gettery

Osobně jsem je také používal, ale celkem sem si zvykl na klasický php callback. A jak píše v odkazu výše @JanTvrdík funguje s tím lépe i PhpStorm.