odeslání mailu s formuláře s dvěma tlačítky
- premek
- Člen | 15
Zdravím, moc prosím o pomoc s odesláním mailu s dvěma tlačítky (ok a cancel), nemám bohužel možnost to jak odzkoušet a nevím jak „špatně mám“ obslužné handlery, a taky jak tak správně natlačit
<?php
} catch (IOException $e) {
$form->addError($e->getMessage());
}
?>
Mám vlastní render formáláře, ten šlape ok. A toto v presenteru:
<?php
protected function createComponentMailForm($name)
{
$form = new NAppForm($this, $name);
$form->addText('predmet', '', 24);
$form->addTextArea('zprava', '', 55, 5);
$form->addText('jmeno', '', 24);
$form->addText('email', '', 24)
->setEmptyValue('@');
$form->addSubmit('okSubmit', '')
->onClick[] = array($this, 'okClicked');
$form->addSubmit('cancelSubmit', '')
->setValidationScope(FALSE)
->onClick[] = array($this, 'cancelClicked');
$form['predmet']->addRule(NForm::FILLED, 'Uveďte předmět zpravy.');
$form['zprava']->addRule(NForm::FILLED, 'Napište text Vaší zprávy.');
$form['jmeno']->addRule(NForm::FILLED, 'Uveďte Vaše jméno.');
$form['email']->addRule(NForm::FILLED, 'Uveďte Váši e-mailovou adresu.')
->addRule(NForm::EMAIL, 'Zadaná adresa není správnou adresou elektronické pošty.');
$form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou.', 60 * 15);
return $form;
}
public function okClicked(NSubmitButton $button)
{
NDebug::dump($button->getForm()->getValues());
$this->redirect('MailForm:send');
}
public function cancelClicked(NSubmitButton $button)
{
$this->redirect('this');
}
public function formSubmitted(NAppForm $form)
{
if (!$form['cancel']->isSubmittedBy()) {
$values = $this->getRequest;
$mail = new NMail;
$mail->setSubject($values['predmet']);
$mail->setFrom($values['email'], $values['jmeno']);
$mail->addTo('Info <info@info.cz>');
$template = $this->createTemplate();
$template->name = $values['jmeno'];
$template->email = $values['email'];
$template->text = $values['zprava'];
$mail->setHtmlBody($template);
if($mail->send()){
$this->getPresenter()->flashMessage('Email byl úspěšně odeslán.');
} else {
$this->getPresenter()->flashMessage('Email se nezdařilo odeslat', 'warning');
}
$this->redirect('MailForm:send');
}
}
?>
Prosím jeslti by se našel někdo kdo by mi v tom popřípadě opravil chyby, bastlím to s přestávkami už nějaký pátek a jsem čím dál víc negramotnejší. :(
Taky se snažím o rozjetí administrace, máme to jako projekt do školy, ale to je spíše otázka „Práce a zakázky“. Pokud by se někdo našel moc by mi to pomohlo.
- Patrik Votoček
- Člen | 2221
Naco tam máš formSubmitted
když k němu nemáš nikde
řečeno že se má volat?
// buďto používej
$form->addSubmit('okSubmit', '')
->onClick[] = callback($this, 'okClicked');
$form->addSubmit('cancelSubmit', '')
->setValidationScope(FALSE)
->onClick[] = callback($this, 'cancelClicked');
// nebo
$form->onSubmit[] = callback($this, 'formSubmitted');
- premek
- Člen | 15
Tak ještě moc prosím o pomoc, při zkoušce mailformuláře v této „výsledné“ podobě:
<?php
protected function createComponentMailForm($name)
{
// definice formuláře
$form = new NAppForm($this, $name);
$form->addText('predmet', '', 24);
$form->addTextArea('zprava', '', 55, 5);
$form->addText('jmeno', '', 24);
$form->addText('email', '', 24)
->setEmptyValue('@');
$form->addSubmit('okSubmit', '');
$form->addSubmit('cancelSubmit', '')
->setValidationScope(FALSE);
$form->onSubmit[] = callback($this, 'formSubmitted');
// definice validací, podmínek a dalších pravidel
$form['predmet']->addRule(NForm::FILLED, 'Uveďte předmět zpravy.');
$form['zprava']->addRule(NForm::FILLED, 'Napište text Vaší zprávy.');
$form['jmeno']->addRule(NForm::FILLED, 'Uveďte Vaše jméno.');
$form['email']->addRule(NForm::FILLED, 'Uveďte Váši e-mailovou adresu.')
->addRule(NForm::EMAIL, 'Zadaná adresa není správnou adresou elektronické pošty.');
$form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou.', 60 * 15); //ruční nastavení chybové hlášky
return $form;
}
public function formSubmitted(NAppForm $form)
{
// process cancelled
if($form['cancelSubmit']->isSubmittedBy()){
$this->redirect('this');
}
// submitted and valid
if ($form['okSubmit']->isSubmittedBy()) {
$values = $form->getValues();
$mail = new NMail;
$mail->setSubject($values['predmet']);
$mail->setFrom($values['email'], $values['jmeno']);
$mail->addTo('...', '...');
$template = $this->createTemplate();
$template->setFile(APP_DIR.'/FrontModule/templates/MailForm.tmpl.latte');
$template->name = $values['jmeno'];
$template->email = $values['email'];
$template->text = $values['zprava'];
$mail->setHtmlBody($template);
if($mail->send()){
$this->getPresenter()->flashMessage('Email byl úspěšně odeslán.');
} else {
$this->getPresenter()->flashMessage('Email se nezdařilo odeslat', 'warning');
}
$this->redirect('MailForm:send');
}
}
?>
Mi po najetí na formulář hlásí:
We're sorry! The server encountered an internal error and was unable to complete your request. Please try again later.
Po zapnutí laděnky na dev. toto:
Cannot load presenter ‚Error‘, class ‚ErrorPresenter‘ was not found
in …
Presenter tam však je.
Poradí prosím někdo v čem by mohl být problém, popřípadě jak ho odstranit, díky.?
- premek
- Člen | 15
Ještě jednou poprosím o radu, k tomuto
formuláři, na produkčním serveru stále stejná chyba s uvedením Error
500. Ani po promazáni cache bez žádné změny.
Na locale jsem ho však rozchodil a emaily posílá, ale po přepsání
posledního redirectu na this, mi po odeslání mailu vypíše zprávu flash
mess., že mail se nezdařilo odeslat, idkyž ho odeslal správně a příjde
ok? Nechybí v tom ifu něco, prosím?
Moc děkuji za pomoc.