Итак, у меня есть этот сайт, который я разрабатываю, просто одна страница начальной загрузки с несколькими разделами автоматической прокрутки. На странице есть раздел новостной рассылки, где зритель может ввести свой адрес электронной почты для подписки. Форма для этого работает просто отлично. Но проблема ниже, здесь есть поле для контактов «Ввод имени, электронной почты, темы и сообщения», где зритель может отправить контактное сообщение.
Базовая структура Код для контактной формы:
{{ 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('[email protected]')
->send(new \App\Mail\ContactForm($data));
return back();
}
}
Код для Mailable, который не работает:
<?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('[email protected]');
// ->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. Но когда я заполняю контактную форму, ничего не происходит. Страница не загружается. Сообщение не приходит.
Когда я пытаюсь отправить только одну переменную (например, тему, имя, адрес электронной почты или сообщение), это работает. Но отправка нескольких переменных не работает.
Пожалуйста посоветуй.
Здесь довольно много вопросов. Похоже, вы не до конца понимаете видимость переменных 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;
как первая строка
Других решений пока нет …