Отправка запроса в Laravel и отправка почты - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь отправить форму и отправить электронное письмо на основе данных, отправленных через форму, но, похоже, это не работает, потому что я не получаю сообщение об успехе.

Контроллер

public function contact(Request $request)
{
    $request = request()->validate([
        'name' => 'required',
        'email' => 'required| email',
        'message' => 'required | max:1000',
    ]);

    Mail::to('support@mail.com')->send(new contact($request));

    return redirect()->back()->with("success", "You email has successfully been sent");
}

Форма

@if (session('error'))
    <div class="alert alert-danger">
        {{ session('error') }}
    </div>
@endif
@if (session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif
<form action="/contact" method="POST">
    @csrf
    <div class="col-md-12">
        <input type="text" placeholder="Full Name" required name="name">
    </div>
    <div class="col-md-8">
        <input type="text" placeholder="email" required name="email">
    </div>
    <div class="col-md-2">
        <textarea name="message"></textarea>
    </div>
    <div class="col-md-12">
        <button class="btn btn-black no-margin-bottom btn-small" 
        type="submit">Contact</button>
    </div>
</form>

Маршрут

`Route::post('/contact', 'HomeController@contact');`

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

Убедитесь, что в вашей форме правильно отображаются ошибки, замените блок session('error') следующим:

@if($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

В вашем контроллере:

use App\Mail\Contact;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class HomeController extends Controller
{
    // ...

    public function contact(Request $request)
    {
        // Note I'm not overwriting the $request variable.
        // This method returns an array of the validated data.
        $request->validate([
            'name' => 'required',
            'email' => 'required|email',
            'message' => 'required|max:1000'
        ]);

        Mail::to('support@mail.com')->send(new Contact($request));

        return back()->with('success', 'Your email has successfully been sent');
    }
}

Ваш почтовый класс должен выглядеть примерно так:

namespace App\Mail;

use Illuminate\Http\Request;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class Contact extends Mailable
{
    use Queueable, SerializesModels;

    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function build()
    {
        // The request instance must be passed to the view...
        return $this->markdown('emails.contact', [
            'request' => $this->request
        ]);
    }
}

Теперь вы можете использовать объект Request в уценке вашей электронной почты (emails.contact). Например:

**Name**<br>
{{ $request->input('name') }}

**Email**<br>
{{ $request->input('email') }}

**Message**<br>
{{ $request->input('message') }}
0 голосов
/ 12 мая 2019

Если вы перенаправлены обратно на страницу формы без сообщений об ошибках или вашего успешного флеш-сообщения, я склонен думать, что проблема в вашем шаблоне.Предполагая, что вы используете пакет laracasts / flash, ваш метод должен выглядеть следующим образом:

public function contact(Request $request)
{
    $request = request()->validate([
        'name' => 'required',
        'email' => 'required| email',
        'message' => 'required | max:1000'
    ]);

    Mail::to('support@mail.com')->send(
         new contact($request)
    );

    return redirect()->back()->with("success", "You email has successfully been sent");
}

redirect () -> with () добавляет данные в сеанс, но не отображает сообщение, если вы не сделаете это вручнуюв шаблоне вот так

@if (session('sucess'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...