Unknown validator ‚MyValidators::divisibilityValidator‘ for control ‚num1‘

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

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
+
0
-

namespace…

motorcb
Člen | 552
+
0
-

Namespace u obou tříd je stejný, to je OK,ne?

David Matějka
Moderator | 6445
+
0
-

Ale predavas

'MyValidators::divisibilityValidator'

coz je retezec, ze ktereho se nenecha resolvnout ta trida spravne. Tak pouzij FQN

motorcb
Člen | 552
+
0
-

Ha co to je FQN? :-)

Marek Šneberger
Člen | 130
+
0
-

FQN aneb celá cesta s namespace.

David Grudl
Nette Core | 8282
+
0
-

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
+
0
-

@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)