php Laravel按需通知错误“未定义索引:姓名”

vdgimpew  于 2023-01-29  发布在  PHP
关注(0)|答案(4)|浏览(161)

拉腊维尔5.5.28
我正在使用Laravel的按需通知发送一封简单表单提交到一个中心地址的电子邮件。
我在env文件中设置了mailtrap。
我的控制器中的代码:

use Notification // set at top of class
$submission = FormSubmission::create($request->all());

Notification::route('mail', 'test@test.org')
    ->notify(new FormSubmissionNotificiation($submission));

但是得到一个whoops错误。在vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php上这个方法失败了

protected function setGlobalAddress($mailer, array $config, $type)
    {
        $address = Arr::get($config, $type);

        if (is_array($address) && isset($address['address'])) {
            $mailer->{'always'.Str::studly($type)}($address['address'], $address['name']);
        }
    }

它试图找到$address['name']的索引,但是我没有名字,如果我有,我把它放在哪里呢?
看起来想不出来,谢谢你的帮助。
编辑:我尝试了另一种方法,我在数据库中添加了一个用户,在User模型中添加了Notifiable trait,并尝试发送如下通知
$user->notify(new FormSubmissionNotification($submission);,但仍然得到相同的错误。

fdbelqdn

fdbelqdn1#

来自通知文档:
发送邮件通知时,请确保在config/app.php配置文件中设置name值。此值将用于邮件通知消息的页眉和页脚。

xnifntxz

xnifntxz2#

必须在.env中设置MAIL_NAME
config/mail.php

/*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => ['address' => env('MAIL_FROM', null), 'name' => env('MAIL_NAME', null)],

https://laravel.com/docs/5.5/mail#writing-mailables

x9ybnkn6

x9ybnkn63#

好吧,我知道了。其实挺蠢的。
我在.env文件中添加了一个MAIL_TO_ADDRESS变量,用于保存我希望将通知发送到的电子邮件地址,但不想在控制器中直接调用env文件,因此在config/mail.php文件中设置了一个新的数组元素,如下所示

'to' => [
      'address' => env('MAIL_TO_ADDRESS')
  ],

然后我计划在控制器中使用它,就像这样

Notification::route('mail', config('mail.to.address'))
        ->notify(new FormSubmissionNotificiation($submission));

但是即使我直接在控制器中使用一个字符串形式的虚拟电子邮件地址进行测试,它也使用了to变量和邮件配置文件中的电子邮件地址,即使我没有在任何地方引用它。
一旦我从配置文件中删除了整个数组,它就可以工作了,同样,如果我向该数组添加一个名称,它也可以工作了。这也阻止了我使用标准的$user->notify(),并且总是试图使用env文件中的电子邮件地址,而不是用户模型。

ryhaxcpt

ryhaxcpt4#

你必须把名字放在config\mail.php中的“to”数组中

to' => [
            'address' => env('MAIL_TO_ADDRESS', 'hello@example.com'),
            'name' => env('MAIL_FROM_NAME', 'Example'),
     ],

并且在各自的模型中

public function routeNotificationForMail($notification)
          {
                return $this->email_address=config('mail.to.address');
           
          }

参见laravel官方文件laravel@8.x

相关问题