Použití vlastní validační funkce ve formulářové komponentě v presenteru
- brontosaurus
- Člen | 49
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ý');
?>
- brontosaurus
- Člen | 49
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();
}
?>
- brontosaurus
- Člen | 49
<?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;
}
?>
- brontosaurus
- Člen | 49
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
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')