首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将变量从组件控制器传递给邮件- Laravel

无法将变量从组件控制器传递给邮件- Laravel
EN

Stack Overflow用户
提问于 2020-12-03 06:42:27
回答 1查看 236关注 0票数 1

当我试图创建一个邀请并通过邮件发送链接给用户时,我收到了一个错误。我能够成功地发送邮件,成功的创建邀请。但是,当我试图将变量$invitation传递给App\Mail\InvitationCreated时,即使在可邮件(例如__construct(Invitation $invitation) )中初始化变量之后,也会出现错误。

请帮助我理解这里的问题。

App\Models\Invitation

代码语言:javascript
复制
class Invitation extends Model
{
    use HasFactory;

    protected $fillable = [
        'email', 'invitation_token', 'registered_at',
    ];

    public function generateInvitationToken() {
        $this->invitation_token = substr(md5(rand(0, 9) . $this->email . time()), 0, 32);
    }

    public function getLink() {
        return urldecode(route('register') . '?invitation_token=' . $this->invitation_token);
    }
}

App\Http\Livewire\InvitationController

代码语言:javascript
复制
use Illuminate\Support\Facades\Mail;

use App\Models\Invitation;
use App\Mail\InvitationCreated;

class InvitationController extends Component
{
    use WithPagination;

    public $showEditModal = false;
    public Invitation $invitation;

    protected $rules = [
        'invitation.email' => 'required | email | max:255 | unique:users,email',
    ];

    public function mount()
    {
        $this->invitation = new Invitation();
    }

    public function save()
    {
        $this->validate();
        $this->invitation->generateInvitationToken();
        $invitation = $this->invitation->save();
        $this->showEditModal = false;

        Mail::to($this->invitation->email)->send(new InvitationCreated($invitation));
    }
}

App\Http\Mail\InvitationCreated

代码语言:javascript
复制
use App\Models\Invitation;

class InvitationCreated extends Mailable
{
    use Queueable, SerializesModels;

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

    public function build()
    {
        return $this->from('server@localhost.com')->view('emails.invite-created');
    }
}

resources\views\emails\invite-created

代码语言:javascript
复制
<p>Hi,</p>
<p>Someone has invited you to access their account.</p>
 
<a href="{{ $invitation->getLink() }}">Click here</a> to activate!

错误,我得到的是

代码语言:javascript
复制
Argument 1 passed to App\Mail\InvitationCreated::__construct() must be an instance of App\Models\Invitation, bool given, called in C:\xampp\htdocs\2020\app\Http\Livewire\Backend\UserManagement\InvitationController.php on line 54
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 06:47:12

尝尝这个

代码语言:javascript
复制
Mail::to($this->invitation->email)->send(new InvitationCreated($this->invitation));

$invitation$this->invitation

$invitation = $this->invitation->save();中,此代码返回真或假数据是否保存。

因此,您可以从公共属性instance of App\Models\Invitation $this->invitation中获取

为了将数据发送到邮件视图,您需要创建公共程序。

代码语言:javascript
复制
use App\Models\Invitation;

class InvitationCreated extends Mailable
{
    use Queueable, SerializesModels;

    public $invitation;

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

    public function build()
    {
        return $this->from('server@localhost.com')->view('emails.invite-created');
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65121067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档