Tlačítko cancel pro formuláře
- mardon
- Člen | 59
Zasekla jsem se na odeslaní formuláře se dvěma tlačítky save a cancel
protected function createComponentAddForm() {
$form = new UI\Form;
//$model = new CategoryModel();
$form->addText('name', 'Název služby:')
->setRequired( 'Název služby.');
$form->addText('url','URL webu:')
->setRequired('URL webu:');
$form->addText('email', 'Email:', 35)
->setEmptyValue('@')
->setRequired() // conditional rule: if is email filled, ...
->addRule(UI\Form::EMAIL, 'E-mail není správně zadán'); // ... then check email
$form->addTextArea('description', 'Popis služby:',35,10)
->setRequired('Popis služby');
$form->addTextArea('adress', 'Adresa:',35,10)
->setRequired('Adresa');
$form->addText('phone','Telefon:')
->setRequired('Telefon');
$form->addPassword('password', 'Heslo:')
->setRequired('Prosím zadajte heslo.');
$form->addPassword('password2', 'Heslo znovu:')
->addConditionOn($form["password"], UI\Form::FILLED)
->addRule(UI\Form::EQUAL, "Hesla se musí shodovat !", $form["password"]);
$form->addSubmit('save', 'Save')
->setAttribute('class', 'default')
->onClick[] = $this->addSubmitted($form);
$form->addSubmit('cancel', 'Cancel')
->onClick[] = $this->formCancelled;
$form->addProtection('Please submit this form again (security token has expired).');
return $form;
}
public function addSubmitted($form) {
dump($form->values);
if ($form['save']->isSubmittedBy()) {
$id = (int) $this->getParam('id');
if ($id > 0) {
$service->update($id, $form->getValues());
$this->flashMessage('The album has been updated.');
} else {
$values = $form->getValues();
$values['password']=sha1($values['password']);
$values['seo']=String::webalize($values['name']);
unset($values['password2']);
$values['date'] = new DateTime;
$LinksRepository->insert($values);
$this->flashMessage('Služba byla přidána.');
}
}
$this->redirect('default');
}
public function formCancelled()
{
$this->redirect('default');
}
Laděnka mi vyhodí chybu: Form is not anchored and therefore can not determine whether it was submitted.
na řádku
if ($form['save']->isSubmittedBy()) {
- David Matějka
- Moderator | 6445
problem je
->onClick[] = $this->addSubmitted($form);
coz ti tu metodu zavola, kdyz to chces jako callback, tak jen
->onClick[] = $this->addSubmitted;
ale spis nez na event onClick u buttonu bych to navazal na onSuccess u formu
- David Matějka
- Moderator | 6445
jo, to mi nedoslo. nejlepsi bude, jak rikam, pouzit spis
$form->onSuccess[] = $this->addSubmitted;
ale pokud to opravdu chces nechat na tom callbacku onSubmit, tak se do te metody jako parametr neposila Form, ale prave SubmitButton, takze uprav addSubmitted na
public function addSubmitted($button) {
$form = $button->getForm();
ale lepsi bude ten onSuccess callback :)
- mardon
- Člen | 59
matej21 napsal(a):
jo, to mi nedoslo. nejlepsi bude, jak rikam, pouzit spis
$form->onSuccess[] = $this->addSubmitted;
ale pokud to opravdu chces nechat na tom callbacku onSubmit, tak se do te metody jako parametr neposila Form, ale prave SubmitButton, takze uprav addSubmitted na
public function addSubmitted($button) { $form = $button->getForm();
ale lepsi bude ten onSuccess callback :)
sice nechápu kde se tam vzal ten button , ale nyní již funguje dle představ
- David Matějka
- Moderator | 6445
to $button predava nette, o udalostech si muzes precist tady
volani $this->addSubmitted
je jen zkratka
pro callback($this, 'addSubmitted')