Witam,
Mam problem z wysyłaniem danych z formularza na konto pocztowe przy pomocy Swiftmailera.
Formularz widok:
<h2>Formularz Kontaktowy</h2> <?php http://www.php.net/echo $view['form']->start($form)?> // Nie używam tutaj przykładowo <form action = "{{path('success') }}" method="POST". Jak wskazać namiar na akcję kontrolera // po wysłaniu formularza? <?php http://www.php.net/echo $view['form']->errors($form) ?> <div> <?php http://www.php.net/echo $view['form']->row($form['name'],http://www.php.net/array( 'label' => false, 'attr' => http://www.php.net/array( 'class' => 'name', 'placeholder' => ' ImiÄ'),)) ?> </div> <div> <?php http://www.php.net/echo $view['form']->row($form['surname'],http://www.php.net/array( 'label' => false, 'attr' => http://www.php.net/array( 'class' => 'surname', 'placeholder' => ' Nazwisko'),)) ?> </div> <div> <?php http://www.php.net/echo $view['form']->row($form['email'],http://www.php.net/array( 'label' => false, 'attr' => http://www.php.net/array( 'class' => 'email', 'placeholder' => ' Email'),)) ?> </div> <div> <?php http://www.php.net/echo $view['form']->row($form['subject'],http://www.php.net/array( 'label' => false, 'attr' => http://www.php.net/array( 'class' => 'subject', 'placeholder' => ' Temat'),)) ?> </div> <div> <?php http://www.php.net/echo $view['form']->row($form['note'],http://www.php.net/array( 'label' => false, 'attr' => http://www.php.net/array( 'class' => 'note', 'placeholder' => ' WiadomoĹÄ...'), ) ) ?> </div> <input type="submit" class="btn-form-style" value="WYĹLIJ" ?>"/> <?php http://www.php.net/echo $view['form']->end($form) ?>
class Message { protected $name; protected $surname; protected $email; protected $subject; protected $note; public function getMessage() { return $this->message; } public function setMessage($message) { $this->message = $message; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getSurname() { return $this->surname; } public function setSurname($surname) { $this->surname = $surname; } public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } public function getSubject() { return $this->subject; } public function setSubject($subject) { $this->subject = $subject; } public function getNote() { return $this->note; } public function setNote($note) { $this->note = $note; } } ?>
public function contactAction(Request $request) { $message = new Message(); $form = $this->createForm(new ContactType(),$message); if ($form->isValid()) { // Moge zastosować tu taki warunek? $message = \Swift_Message::newInstance() ->setSubject($message->getSubject()) ->setFrom(http://www.php.net/array($message->getEmail())) ->setTo('.....@gmail.com') ->setBody($message->getNote()); $this->get('mailer')->send($message); return $this->redirect($this->generateUrl('acme_task_success')); } return $this->render('AcmePageBundle:Default:contact.html.php', http://www.php.net/array( 'form' => $form->createView(), )); }
class ContactType extends AbstractType { public function buildForm(FormBuilderInterface $builder, http://www.php.net/array $options) { $builder ->add('name','text') ->add('surname','text') ->add('email','email') ->add('subject','text') ->add('note','textarea'); } public function getName() { return 'name'; } }
acme_task_success: path: /homepage/ defaults: { _controller: AcmePageBundle:Default:homepage }
# Swiftmailer Configuration swiftmailer: transport: smtp host: http://www.php.net/mail.nazwadomeny.pl username: kontakt.nazwadomeny.pl password: haslo spool: { type: memory }
if ($form->isValid()) {
Nie wiesz jak się pracuje z formularzami.
Tworzysz formularz i potem wywołujesz $form->handleRequest(Request $request) lub $form->submit(array $request->request->all()); Inaczej zawsze $form->isValid() === false
Dodałem:
public function contactAction(Request $request) { $message = new Message(); $form = $this->createForm(new ContactType(),$message); // $form->handleRequest(Request $request) <-- forti nie zrobiłeś tu błędu? $form->handleRequest($request); tak nei zwraca błędu if ($form->isValid()) {
protected function loadMetadata($name) { $loaded = parent::loadMetadata($name); http://www.php.net/array_map([$this, 'resolveDiscriminatorValue'], http://www.php.net/array_map([$this, 'getMetadataFor'], $loaded)); return $loaded; }
Masz wersje php ktora nie obsluguje jeszcze tablic []
Obecnie mam ustawioną 5.3 ale moge zmienic na 5.4 5.5 5.6
Za kilka minut będę miał 5.6 to sprawdzę czy to to.
Ok to było to .... Po zmianie na 5.6 wchodzi w petlę
if ($form->isValid()) {
if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setSubject($message->getSubject()) ->setFrom(http://www.php.net/array($message->getEmail())) ->setTo('adres@gmail.com') ->setBody($message->getNote()); $this->get('mailer')->send($message); return $this->redirect($this->generateUrl('acme_task_success')); }
A jaki dostajesz błąd? Włącz wersje deweloperską ...
Popatrzyłem w logi produkcyjne i miałem problem z przekierowaniem Nie znajdowal routingu.
Teraz jest taka sytuacja, że formularz sie wysyła, nie zglasza żadnego błędu, ale mail nie dociera na skrzynkę.
Coś mam nie tak z wypełnianiem obiektu danymi z formularza:
Teraz kod wygląda tak:
if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setSubject($message->getSubject()) ->setFrom(http://www.php.net/array($message->getEmail())) ->setTo('terefere@o2.pl') ->setBody($message->getNote()); http://www.php.net/print_r($message->getSubject); http://www.php.net/print_r($message->getEmail); $this->get('mailer')->send($message); return $this->redirect($this->generateUrl('acme_page_success')); } if (!$form->isValid()) { return $this->render('AcmePageBundle:Default:contact.html.php', http://www.php.net/array( 'form' => $form->createView(), )); }
Nie getSubject a getSubject()
Tak widzę już .... dzieki, za długo nad tym siedze i nie zauważyłem.
Mam taki kod: if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setName($message->getName()) ->setSurname($message->getSurname()) ->setEmail($message->getEmail()) ->setSubject($message->getSubject()) ->setTo('kontakt@nazwadomeny.pl') ->setBody($message->getNote()); http://www.php.net/print_r($message->getName()); http://www.php.net/print_r($message->getSurname()); http://www.php.net/print_r($message->getEmail()); http://www.php.net/print_r($message->getSubject()); http://www.php.net/print_r($message->getNote()); $this->get('mailer')->send($message); return $this->redirect($this->generateUrl('acme_page_success')); }
Nadpisales zmienna message przez swifta
Możesz jaśniej ?
$message = \Swift_Message::newInstance() ->setName($message->getName())
memory - dzięki za wskazanie błędu.
Poprawiłem i zmieniłem nieco kod
Controller:
public function contactAction(Request $request) { $message = new Message(); $form = $this->createForm(new ContactType(),$message); $form->handleRequest($request); if ($form->isValid()) { $to_send = \Swift_Message::newInstance() ->setSubject($message->getSubject()) ->setFrom($message->getFrom()) ->setTo('nazwadomeny.pl') ->setBody($message->getNote()); $this->get('mailer')->send($to_send); return $this->redirect($this->generateUrl('acme_page_success')); } if (!$form->isValid()) { return $this->render('AcmePageBundle:Default:contact.html.php', http://www.php.net/array( 'form' => $form->createView(), )); } }
<?php // src/Acme/PageBundle/Entity/Message.php namespace Acme\PageBundle\Entity; class Message { protected $name; protected $surname; protected $from; protected $subject; protected $note; public function getMessage() { return $this->message; } public function setMessage($message) { $this->message = $message; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getSurname() { return $this->surname; } public function setSurname($surname) { $this->surname = $surname; } public function getFrom() { return $this->from; } public function setFrom($from) { $this->from = $from; } public function getSubject() { return $this->subject; } public function setSubject($subject) { $this->subject = $subject; } public function getNote() { return $this->note; } public function setNote($note) { $this->note = $note; } } ?>
$body = 'Od '.$message->getName().' '.$message->getSurname().'<br>Tresc:<br>'.$message->getNote();
->setBody($body;
Dzięki Turson
Wrzuciłem to do from
->setFrom(http://www.php.net/array($message->getFrom() => $name_surname))
Dzisiaj ostatnio raz Tobie pomogłem z symfony Czasami miło jak ktoś kliknie pomógł gdy faktycznie się pomaga
@up naprawdę przyszedłeś tu tylko dla tego pomógł? jak tak to może czas porzucić to forum. Widzę już kolejny taki post od Ciebie, jak Ci żal, że ktoś Ci nie dał to pisz do moderatora i dostaniesz. W regulaminie masz taki zapis, jest gdzieś przepięte
No i fajnie, że klikałeś, inni też klikają, nie chodzi przecież o to, tylko płaczesz o to, że Ci nie dali a chyba jesteśmy dorośli. Te pomógł itak niczego Ci przecież nie daje, prócz tego iż jest to podziękowanie za nasz trud. Nie dziwie się, że autor nie dał bo jakbyś u mnie się prosił też bym nie dał. Każdy kto komuś pomaga tu poświęca swój czas i pewnie, że cieszy jak się dostanie ale no bez przesady.
Ilość "pomógł" to przedłużenie p...
#potwierdzoneInfo
Ta bo to ma jakiekolwiek znaczenie, nie ilość się liczy a jakość
Za bardzo poważnie di tego podchodzicie ja tan lubie cyferki i gdy ktos mi to kliknie. Dla mnie to zabawa i mam z tego radość. Wy macie radość z pomagania, ja z tego ze ktos mi klika pomógł jak się nie podoba to sorki, przykro mi. Mi sie nie podoba ze nie dostaje pomógł i tyle w temacie!
@Forti może ton twoich wypowiedzi nie odpowiada ludziom. Piszesz komuś kto prosi o pomoc że nie potrafi pracować z formularzami po to pyta aby się nauczyć.
1. temat dotyczy swiftmailera. Nie sprawdził porządnie gdzie ma błąd
2. "developuje" na produkcjnym śwodowisku - serio?
3. Kiedyś pytał o formularze i udzielałem bardzo szczegółowych odpowiedzi. Nie kliknął z tego co pamiętam (mogę się mylić)
4. Gdyby spełnił punkt 2, czyli pracował tak jak powinno się, to dostał by wielki exception Nie podoba się ton wypowiedzi? Przepraszam.. next time dam czekolade za chęci napisania tematu z kodem, który zajmuje kilkukrotnie więcej czasu niż sprawdzenie logów.
Serio?
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)