使用Mail类时参数不足:需传1个参数但实际传0个,求排查
问题:Laravel Mailable发送邮件提示参数不足错误
我尝试使用Mailable类发送简单邮件,完全按照网上教程操作,但仍报错:Too few arguments to function, 0 passed in and exactly 1 expected when using Mail,相关代码如下:
TestMail.php
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class TestMail extends Mailable { use Queueable, SerializesModels; public $details; /** * Create a new message instance. * * @return void */ public function __construct($details) { $this->details = $details; } /** * Build the message. * * @return $this */ public function build() { return $this->subject('Test Mail from Duke')->view('emails.TestMail'); } }
MailController.php
<?php namespace App\Http\Controllers; use App\Mail\TestMail; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; class MailController extends Controller { // public function sendEmail() { $details = [ 'title' => 'The Title', 'body' => 'The body should be fine', ]; Mail::to("sirduketylo@gmail.com")->send(new TestMail()); return "Email Sent"; } }
路由文件
<?php use App\Http\Controllers\MailController; use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); Route::get('/send', [MailController::class, 'sendEmail']);
解决方案
错误原因:TestMail类的构造函数明确要求传入一个$details参数,但你在实例化TestMail时没有传递该参数。
修改MailController中的sendEmail方法,将定义好的$details传入TestMail的实例化语句中:
public function sendEmail() { $details = [ 'title' => 'The Title', 'body' => 'The body should be fine', ]; // 传入$details参数 Mail::to("sirduketylo@gmail.com")->send(new TestMail($details)); return "Email Sent"; }
修改后即可满足构造函数的参数要求,解决该错误。
内容的提问来源于stack exchange,提问作者Jojo Amankwa
相关产品推荐
相关产品推荐

