laravel 9.x 将控制器变量传递给另一个文件

laravel 9.x passing controller variable to another file

我正在尝试将 PagesController.php 上的表单值传递给 HelloMail.php 传递变量后,它将发送邮件。 我是 laravel 的新手,尝试对其进行一些研究并阅读较旧的问题,但其中 none 包含对我的问题的正确答案。

问题:HelloEmail.php 上的未定义变量 => $emailSender - $emailSubject - $emailBody

我需要为此更改路线吗?还是可以在控制器上制作?

web.php

Route::post('/message',[App\Http\Controllers\PagesController::class,'getData'])->name('message');
Route::view('message','message');

Route::get('/send-email', [App\Http\Controllers\EmailController::class, 'sendEmail']);

PagesController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PagesController extends Controller
{
    public function getData(Request $Req)
    {
        $emailSender = $Req->input('emailSender');
        $emailSubject = $Req->input('emailSubject');
        $emailBody = $Req->input('emailBody');
       
    }
}

HelloEmail.php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use app\Http\Controllers\PagesController;

class HelloEmail extends Mailable
{
    use Queueable, SerializesModels;
    public function __construct()
    {
        //
    }
    public function build()
    {
        return $this->from($emailSender)
                    ->body('$emailSubject')
                    ->subject('$emailBody');
        }
}

EmailController.php

namespace App\Http\Controllers;

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

class EmailController extends Controller
{
    public function sendEmail()
    {
        $toAddress= "email@example.com";

        Mail::to($toAddress)->send(new HelloEmail);
        dd("Email is sent successfully.");
    }
}

不确定您要从单独的请求发送电子邮件中寻找什么,但您可以将变量从构造函数传递给 HelloEmail class

示例

HelloEmail

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use app\Http\Controllers\PagesController;

class HelloEmail extends Mailable
{
    use Queueable, SerializesModels;
    
    private $emailSender;
    private $emailSubject;
    private $emailBody;
    
    
    public function __construct($emailSender, $emailSubject, $emailBody)
    {
        $this->emailSender = $emailSender;
        $this->emailSubject = $emailSubject;
        $this->emailBody = $emailBody;
    }
    public function build()
    {
        return $this->from($this->emailSender)
            ->body($this->emailBody)
            ->subject($this->emailSubject);
    }
}

并在 EmailController

namespace App\Http\Controllers;

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

class EmailController extends Controller
{
    public function sendEmail()
    {
        $toAddress= "email@example.com";

        Mail::to($toAddress)->send(new HelloEmail('sender@example.com', 'email subject !', 'the body'));
        dd("Email is sent successfully.");
    }
}

希望有用