Unknown validator ‚MyValidators::divisibilityValidator‘ for control ‚num1‘
- motorcb
- Člen | 552
Zdravím,
pokouším se rozject vlasní validování formulářů podle https://github.com/…alidator.php
Mám RegistrationPresenter.php:
<?php
namespace App\FrontModule\Presenters;
use App;
use App\Model;
use App\Presenters\BasePresenter;
use App\FrontModule\Presenters\MyValidators;
use Nette;
use Nette\Application\UI\Form;
class RegistrationPresenter extends BasePresenter
{
protected function createComponentUserForm()
{
$form = new Form;
$form->addText('num1', 'Multiple of 8:')
->setDefaultValue(5)
->addRule('MyValidators::divisibilityValidator', 'First number must be %d multiple', 8);
//...
}
}
A MyValidators.php umístěný na stejné úrovni jako RegistrationPresenter.php:
<?php
namespace App\FrontModule\Presenters;
class MyValidators
{
static function divisibilityValidator($item, $arg)
{
return $item->value % $arg === 0;
}
}
Cache jsem smazal a po spusteni dostávám chybu: Unknown validator
‚MyValidators::divisibilityValidator‘ for control ‚num1‘.
Co dělám špatně? Díky
- David Matějka
- Moderator | 6445
Ale predavas
'MyValidators::divisibilityValidator'
coz je retezec, ze ktereho se nenecha resolvnout ta trida spravne. Tak pouzij FQN
- David Grudl
- Nette Core | 8282
Není potřeba FQN (tedy zápis začínajíci lomítkem), ale celý název třídy s kompletním namespace.
- David Matějka
- Moderator | 6445
@DavidGrudl cekal jsem, ze se nekdo ozve :)
fqn beru jako jednoznacny a nezamenitelny nazev tridy v danem kontextu. Takze
treba v tomto callbacku, ktery se predava jako string a kde se nebere v potaz
aktualni namespace, neni treba pocatecni lomitko uvadet. Stejne o fqn hovori kapitola o importech trid v php. (navzdory tomu, ze
jina kapitola explicitne uvadi nutnost lomitka http://php.net/…es.rules.php)