【问题标题】:Laravel Mailables pass several variables to __construct() and ControllerLaravel Mailables 将几个变量传递给 __construct() 和 Controller
【发布时间】:2018-08-12 11:32:36
【问题描述】:

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

我有以下问题:

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

这是我的表单控制器

<?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');*/
    }
}

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

【问题讨论】:

  • 请添加您的邮件视图代码。

标签: php laravel


【解决方案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');
    }
}

【讨论】:

  • 如果您觉得有帮助,请接受我的回答作为最佳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多