Laravel Mailables将几个变量传递给__construct()和Controller

时间:2018-08-12 11:32:37

标签: php laravel

我有一个联系表,就像其他任何联系表一样(它有一个用于输入姓名,电子邮件,主题和消息的字段)。 我创建了一个FormController.php,在其中验证我的身份并利用Mail发送我的表单。 我还使用php artisan make:mail FormMail --markdown=emails.form.data生成了一个Mailable。

我遇到以下问题:

  1. 我想传递某人输入-> from()方法的电子邮件,但出现一条错误消息Undefined variable。如何提取该特定值,以便在我收到电子邮件时说它来自尝试与我联系的人? 到目前为止,我已经收到Laravel(hello@example.com)中提供的默认电子邮件。我希望电子邮件成为用户输入的电子邮件。例如emily@mail.com screenshot
    1. 我无法将主题传递给-> subject()方法。我收到与#1相同的错误

这是我的FormController

<?php

namespace App\Http\Controllers;

use App\Mail\FormMail;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;

class FormController extends Controller
{
    public function getContacto() {
        return view('pages.contacto');
    }

    public function postContacto(Request $request) {
        $email = 'random@email.com';
        $rules = [
        'name' => 'required|regex:/^[\pL\pM\p{Zs}.-]+$/u',
        'email1' => 'required|email',
        'email2' => 'required|email|same:email1',
        'subject' => 'required|max:70',
        'bodyMessage' => 'required|max:500'
        ];

        $this->validate($request, $rules);

        $name = $request->name;
        $email1 = $request->email1;
        $subject = $request->subject;
        $bodyMessage = $request->bodyMessage;

        Mail::to($email)->send(new FormMail($name, $email1, $subject, $bodyMessage));

        return view('pages.sent');
    }
}

这是我的可邮寄FormMail.php

<?php

namespace App\Mail;

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

class FormMail extends Mailable
{
    use Queueable, SerializesModels;

    public $name;
    public $email1;
    public $subject;
    public $bodyMessage;

    /**
    * Create a new message instance.
    *
    * @return void
    */
    public function __construct($name, $email1, $subject, $bodyMessage)
    {
        $this->name = $name;
        $this->email1 = $email1;
        $this->subject = $subject;
        $this->bodyMessage = $bodyMessage;
    }

    /**
    * Build the message.
    *
    * @return $this
    */
    public function build()
    {
        return $this->with([
        'name' => $this->name,
        'subject' => $this->subject,
        'bodyMessage' => $this->bodyMessage
        ])
        ->markdown('emails.form.data');


        /*DOES NOT WORK 
          return $this->from($email1)->subject($subject)->with([
                        'name' => $this->name,
                        'email1' => $this->email1])
                      ->markdown('emails.form.data');*/
    }
}

您在我的代码中看到的任何帮助和错误将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您没有正确传递fromsubject数据,该数据存储在您的类属性中(您使用的是未定义的局部变量)。

您可以在from方法的第二个参数中传递名称,与subject方法相同的只是在其中传递主题。另外,您还可以在with方法中传递要在电子邮件模板视图中使用的变量。因此,您的FormMail.php将变为:

<?php

namespace App\Mail;

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

class FormMail extends Mailable
{
    use Queueable, SerializesModels;

    public $name;
    public $email1;
    public $subject;
    public $bodyMessage;

    /**
    * Create a new message instance.
    *
    * @return void
    */
    public function __construct($name, $email1, $subject, $bodyMessage)
    {
        $this->name = $name;
        $this->email1 = $email1;
        $this->subject = $subject;
        $this->bodyMessage = $bodyMessage;
    }

    /**
    * Build the message.
    *
    * @return $this
    */
    public function build()
    {
        return $this->from($this->email1, $this->name)->subject($this->subject)->with([
        'name' => $this->name,
        'subject' => $this->subject,
        'bodyMessage' => $this->bodyMessage
        ])
        ->markdown('emails.form.data');
    }
}
相关问题