odoslanie mailu po vyplneni formularu

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

ahojte snazim sa vytvorit formular ktory ked vyplnite tak udaje z neho sa poslu mailom, s nette len zacinam cize sa v nom moc nevyznam, v presenteri som vytvoril toto :

protected function createComponentPostForm() {
    $form = new Nette\Application\UI\Form;
    $form->addText('from', 'od koho:');
    $form->addText('to', 'pre koho:')->setRequired();
    $form->addTextArea('content', 'Obsah:')->setRequired();
    $form->addSubmit('send', 'Ulozit a publikovat');
    $form->onSuccess[] = $this->postFormSucceeded;

    return $form;
  }

  use Nette\Mail\Message;

  public function OdosliMail($form) {
    $mail = new Message;
    $mail->setFrom($form->from)
      ->addTo($form->to)
      ->setSubject('mailik')
      ->setBody($form->content);
      return ($mail);
      }

  use Nette\Mail\SendmailMailer;
  public function Poslat($mail) {
  $mailer = new SendmailMailer;
  $mailer->send($mail);
  }

no a hadze mi error App\Presenters\HomepagePresenter cannot use Nette\Mail\Message – it is not a trait
ale myslim si ze tie moje funkcie su blbosti

David Matějka
Moderator | 6445
+
0
-
  1. precti si o namespacech, use patreji na zacatek souboru, ne doprostred tridy
  2. mas tam postFormSucceeded, ale vypada to, ze to chces zpracovat v OdosliMail
  3. ve $form nejsou primo hodnoty, ty ziskas pomoci ->getValues(), viz https://doc.nette.org/cs/forms#…
  4. ty metody odesliMail a poslat se ti opravdu magicky nepropojeji :) A ani neni moc duvod mit dve metody. Dej si to do jedny…
  5. nevytvarej mailer rucne, injectni si Nette\Mail\IMailer
gandalf
Člen | 4
+
0
-

zatial vsetko okrem bodu 5 som v pohode zvladol, dakujem za rady

David Matějka
Moderator | 6445
+
0
-

pridej do presenteru:

/** @var \Nette\Mail\IMailer @inject */
public $mailer;

(vse je dulezite – musi to byt public a musi to mit ony anotace)

a pak jen volej $this->mailer->send($mail);