You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中将变量从Controller传递到Nova Resource?

你混淆了两个同名的NewsletterMail类:你Controller中引入的是App\Mail\NewsletterMail(邮件类),而你贴的是App\Nova\NewsletterMail(Nova后台资源类),二者完全独立,之前的传参尝试自然无法生效。以下是对应场景的解决方案:


需求1:给Nova后台资源的from字段设置统一默认值/占位符

该方案适合$defaultFrom全局统一的场景,是最推荐的实现方式:

  1. 把固定值写入配置文件,比如在config/app.php中新增配置项:
return [
    // 其他原有配置
    'default_newsletter_from' => 'newsletter@stuttard.de',
];
  1. Controller中直接读取配置取值,不用硬编码:
public function send()
{
    $defaultFrom = config('app.default_newsletter_from');
    DB::table('newsletter_mails')->insert(['from' => $defaultFrom]);

    $emails = DB::select('select * from newsletters order by id desc');
    foreach ($emails as $email) {
        Mail::to($email)->send(new NewsletterMail());
    }
}
  1. Nova资源类中也读取同一配置,值自然统一:
public function fields(Request $request)
{
    return [
        ID::make(__('ID'), 'id')->sortable(),
        Text::make('From', 'from')
            ->default(config('app.default_newsletter_from'))
            ->placeholder(config('app.default_newsletter_from')),
    ];
}

如果你的$defaultFrom是动态生成的非固定值,可以给NewsletterMail对应的Eloquent模型加静态属性存储:

  • 先在app/Models/NewsletterMail.php中定义静态属性:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class NewsletterMail extends Model
{
    public static $defaultFrom = '';
}
  • Controller中先给静态属性赋值再使用:
\App\Models\NewsletterMail::$defaultFrom = '你动态生成的发件人地址';
$defaultFrom = \App\Models\NewsletterMail::$defaultFrom;
  • Nova中直接读取该静态属性即可:
->default(\App\Models\NewsletterMail::$defaultFrom)
->placeholder(\App\Models\NewsletterMail::$defaultFrom)

需求2:给邮件类App\Mail\NewsletterMail传参

如果你是需要把$defaultFrom传给邮件类用于发件人设置,修改对应的邮件类即可:

  1. 编辑app/Mail/NewsletterMail.php,新增构造函数接收参数:
namespace App\Mail;
use Illuminate\Mail\Mailable;

class NewsletterMail extends Mailable
{
    public $fromAddress;

    public function __construct($fromAddress)
    {
        $this->fromAddress = $fromAddress;
    }

    public function build()
    {
        return $this->from($this->fromAddress)
            ->view('你的邮件视图路径');
    }
}
  1. Controller中实例化邮件类时传入参数:
Mail::to($email)->send(new \App\Mail\NewsletterMail($defaultFrom));

内容的提问来源于stack exchange,提问作者Artur Müller Romanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:04