Laravel 5.7: как отправить контактную форму с несколькими ящиками - PullRequest
0 голосов
/ 09 декабря 2018

Итак, у меня есть этот сайт, который я разрабатываю, просто одна страница начальной загрузки с несколькими разделами автоматической прокрутки.На странице есть раздел новостной рассылки, где зритель может ввести свой адрес электронной почты для подписки.Форма для этого работает просто отлично.Но проблема ниже, есть поле для контактов «Ввод имени, электронной почты, темы и сообщения», куда зритель может отправить сообщение контакта.

Базовая структура Код для формы контакта:

      {{ Form::open([
                              'action'   =>   'MailController@contactForm',
                              'class'    =>   'contactForm',
                              'method'   =>   'POST',
                              'files'    =>    true,
                                  ]) }}

            <div class="form-group">

              {{  Form::text('name', $value  = NULL, $attributes = array(

                              'id'           =>  'name',
                              'placeholder'  =>  'Your Name',
                              'class'        =>  'form-control',
                              'data-rule'    =>  'minlen:4',
                              'data-msg'     =>  'Please enter at least 4 chars',
                                )) }}

              @yield('div')

              {{  Form::email('email_two', $value  = NULL, $attributes = array(

                              'id'           =>  'email_two',
                              'placeholder'  =>  'Your Email',
                              'class'        =>  'form-control',
                              'data-rule'    =>  'email',
                              'data-msg'     =>  'Please enter a valid email',
                                )) }}

              @yield('div')

              {{  Form::text('subject', $value, $attributes = array(

                              'id'           =>  'subject',
                              'placeholder'  =>  'Subject',
                              'class'        =>  'form-control',
                              'data-rule'    =>  'minlen:4',
                              'data-msg'     =>  'Please enter at least 8 chars of subject',
                                )) }}

              @yield('div')

              {{  Form::textarea('message', $value, $attributes = array(

                              'id'           =>  'message',
                              'placeholder'  =>  'Message or File',
                              'class'        =>  'form-control',
                              'rows'         =>   5,
                              'data-rule'    =>  'required',
                              'data-msg'     =>  'Please write something for us',

                                )) }}

{{ Form::close() }}

Он выводит красивую красивую форму с моими css и js.Код для контроллера:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Mail\Mailer;
use Illuminate\Http\UploadedFile;

class MailController extends Controller {

          protected $request;
          protected $mailer;

          //method to send the subscriber email   (this one works fine)

          public function subscribe (Request $request, Mailer $mailer) {

                  // grab POST data varaiables

                  $this->request  =   $request;

                  if ($request->filled('email_one')) {
                        // $request->flash();
                        $email_one          =   $request->email_one; //$request->input('email_one')
                        $mailer->to($email_one)
                                ->send(new  \App\Mail\Newsletter($email_one));
                        return back();
                      }
          }


          //method to send the contact form is giving me headaches

          public function contactForm (Request $request, Mailer $mailer) {

                        $this->request  =   $request;

                        // $request->flash();

                        $email_two      =   $request->email_two;
                        $name           =   $request->name;
                        $subject        =   $request->subject;
                        $message        =   $request->message;

                  $mailer->to('contactform@domain.com')
                         ->send(new   \App\Mail\ContactForm($data));

                  return back();



                }


}

Код для почтового ящика, который не работает:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ContactForm extends Mailable {

            use Queueable, SerializesModels;

            // data to be used in view

            public $email_two;
            public $name;
            public $subject;
            public $message;

            public $data;

            /**
             * Create a new message instance.
             *
             * @return void
             */
            public function __construct($data) {

                  $this->email_two     =     $email_two;
                  $this->name          =     $name;
                  $this->subject       =     $subject;
                  $this->message       =     $message;

                  $data                =     array();

                  $data['email']       =      $this->email_two;
                  $data['name']        =      $this->name;
                  $data['subject']     =      $this->subject;
                  $data['message']     =      $this->message;

            }

            /**
             * Build the message.
             *
             * @return $this
             */
            public function build() {

              return $this->markdown('emails.contactform', compact('data'))
                          // ->subject('Message from Contact Box.')
                          ->from('something@something.com');
                          // ->attach('/path/to/file');
            }


}

Код для разметки контактной формы:

@component('mail::message')
# New Message Received.

You have received one new message. Please find below:

@component('mail::panel')
From:     {{ $email_two }}    <br>
Name:     {{ $name }}         <br>
Subject:  {{ $subject }}      <br>
Message:  {{ $message }}      
@endcomponent

@component('mail::panel')
This is the panel content.
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

Итак, друзья,это оноКогда я отправляю новостную рассылку, она успешно работает.Я тестирую с помощью MailTrap.Но когда я заполняю контактную форму, ничего не происходит.Страница не загружается.Сообщение не приходит.Когда я пытаюсь отправить только одну переменную (например, тему, имя, адрес электронной почты или сообщение), это работает.Но отправка нескольких переменных не работает.

Пожалуйста, совет.

1 Ответ

0 голосов
/ 09 декабря 2018

Здесь довольно много вопросов.Похоже, вы не до конца понимаете видимость переменных PHP в классах, поэтому прочитайте документацию .Например, строки $this->request = $request не нужны и ничего не делают.

Далее, когда вы делаете send(new \App\Mail\ContactForm($data)), вы не определили $data.Вы можете сделать $data = $request->all(); или установить указанные выше переменные равными $data['email_two'] = $request->input('email_two'); и т. Д.

Затем в вашем Mailable вы можете заменить весь код конструктора на $this->data = $data;

Наконец, в функции построения добавьте строку $data = $this->data; в качестве первой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...