Použití vlastní validační funkce ve formulářové komponentě v presenteru

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

Zkusil jsem funkci(„doubleEmail“) vložit tak je to v manuálu ale je chybně syntaxe. Nevíte někdo jak se to udělá správně.dík

<?php
->addRule('doubleEmail', 'Email již existuje, použijte jiný');
?>

takhle mi to taky nešlo :

<?php
->addRule($this->doubleEmail, 'Email již existuje, použijte jiný');
?>
David Matějka
Moderator | 6445
+
0
-

Kde a jak mas tu funkci definovanou? jakou chybu to hlasi?

brontosaurus
Člen | 49
+
0
-

hláška pro ten druhý pokus :
syntax error, unexpected ‚->‘ (T_OBJECT_OPERATOR) a mám jí v RegisterPresenteru :

<?php
      public function doubleEmail($checkdouble){
        return $this->database->table('users')->where(['email' => $checkdouble->value])->fetch();
    }
?>
David Matějka
Moderator | 6445
+
0
-

a na cem volas to ->addRule ? ukaz vic kodu

brontosaurus
Člen | 49
+
0
-
<?php
     public function doubleEmail($checkdouble){
        return $this->database->table('users')->where(['email' => $checkdouble->value])->fetch();
    }

    protected function createComponentRegisterForm() {
        $form = new Form;
        $form->addText('name', 'Jméno');
        $form->addText('email', 'E-mail: *', 35)
                ->setEmptyValue('@')
                ->addRule(Form::FILLED, 'Vyplňte Váš email')
                ->addCondition(Form::FILLED)
                ->addRule(Form::EMAIL, 'Neplatná emailová adresa');
                ->addRule('doubleEmail', 'Email již existuje, použijte jiný');
        $form->addPassword('password', 'Heslo: *', 20)
                ->setOption('description', 'Alespoň 6 znaků')
                ->addRule(Form::FILLED, 'Vyplňte Vaše heslo')
                ->addRule(Form::MIN_LENGTH, 'Heslo musí mít alespoň %d znaků.', 6);
        $form->addPassword('password2', 'Heslo znovu: *', 20)
                ->addConditionOn($form['password'], Form::VALID)
                ->addRule(Form::FILLED, 'Heslo znovu')
                ->addRule(Form::EQUAL, 'Hesla se neshodují.', $form['password']);
        $form->addSubmit('send', 'Registrovat');
        $form->onSuccess[] = callback($this, 'registerFormSubmitted');
        return $form;
    }
?>
Grez
Člen | 7
+
+3
-

Řádek nad tím máš středník, který tam nemá co dělat :-)

brontosaurus
Člen | 49
+
0
-

Ten středník jsem opravil a teď jsem to ještě trochu předělal ,že jsem funkci na ověření dal do modelu :

<?php
        public function validateEmail($input){
               return !$this->database->table('users')->where(['email' => $input->getvalue()])->fetch();
            }
?>

a v RegisterPresenteru se na ní odkazuju takhle :

<?php
        ->addRule($this->model->validateEmail(), 'Email již existuje, použijte jiný');
?>

Původně jsem se inspiroval z týhle diskuze https://forum.nette.org/…na-formulari ,kde to dotyčnýmu nakonec zafungovalo ale mě to teď hlásí chybu na tu funkci z modelu :
Missing argument 1 for App\Model\MujModel::validateEmail()

David Matějka
Moderator | 6445
+
+6
-

Nevolej tu metodu, pouze predej callback. tedy $this->mode->validateEmail v pripade, ze ten model dedi od Nette\Object, nebo proste jen array($this->model, 'validateEmail')

brontosaurus
Člen | 49
+
0
-

Funguje.Paráda:-). dík za pomoc