如何控制Laravel中的发射事件

时间:2019-05-16 21:00:11

标签: php laravel events

我有一个事件,当有人在我的网站上注册新帐户时,该事件会触发欢迎电子邮件。

我的问题是,我需要在管理部分中创建“创建用户”页面。现在,每次我在admin部分创建用户时,电子邮件仍会触发一封欢迎新用户的电子邮件。

很好,但是我需要那封电子邮件来说些别的话。

从管理面板创建用户时,我不希望触发欢迎电子邮件。

如何通过发送电子邮件来控制此活动?

代码几乎按以下顺序进行:

1。事件代码: NewUser.php

namespace App\Events;
... irrelevant classes
use Illuminate\Foundation\Events\Dispatchable;
use App\User;
class NewUser
{
    use Dispatchable, InteractsWithSockets, SerializesModels;
    public $user;

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

2。侦听器: SendWelcomeEmail.php

namespace App\Listeners;

use App\Events\NewUser;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Mail;
use App\Mail\NewUserWelcome;

class SendWelcomeEmail
{
    public function __construct()
    {
        //
    }

    public function handle(NewUser $event)
    {
        Mail::to($event->user->email)->send(new NewUserWelcome($event->user));
    }
}

3。邮件: NewUserWelcome.php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;

class NewUserWelcome extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

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

    public function build()
    {
        return $this->subject('Welcome To The Website')->markdown('emails.user.newuserwelcome');
    }
}

4。降价电子邮件将是下一个。

@component('mail::message')
# Greetings bla bla bla

5。 EventServiceProvider:正在这样拨打电话:

    protected $listen = [
        'App\Events\NewUser' => [
            'App\Listeners\SendWelcomeEmail',
        ],
    ];

6。用户模型,我有以下相关代码:

class User extends Authenticatable {

    use Notifiable;

    protected $dispatchesEvents = [
        'created' => Events\NewUser::class
    ];

在我的 ADMIN保存用户功能中| UserController 这是我用来从管理面板保存新用户的内容 :(无事件类)

use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Hash;

class UserController extends Controller
{

    public function adminUserStore(Request $request){

        $newsupporter = User::create([
            'name'=> $request->name,
            'email' => $request->email,
            'password' => Hash::make($quickpass),
        ]);

        return back()->with('success','The user has been created and a password reset email has been sent to them.');     

    }

任何帮助将不胜感激,我已经为此战斗了很长时间。

2 个答案:

答案 0 :(得分:3)

您可以尝试为用户模型添加一个新的可为空的列,该列将检查用户是由管理员还是由​​其他人添加的;

 $newsupporter = User::create([
            'name'=> $request->name,
            'email' => $request->email,
            'password' => Hash::make($quickpass),
            'added_by' => 'admin',
        ]);

然后创建一个检查并仅在未将用户添加到我的管理员时发送电子邮件,

public function handle(NewUser $event)
    {
       if(!$event->user->added_by == 'admin'){
            Mail::to($event->user->email)->send(new NewUserWelcome($event->user));
        }
    }

答案 1 :(得分:0)

我个人将介绍两个事件,而不是一个。与AccountCreatedByUserAccountCreatedByAdmin相似。然后,这些事件可以由单独的侦听器处理,该侦听器将发送单独的电子邮件。这意味着您将不得不手动触发这些事件,而不是依赖于内置的created事件。可以这样完成: event(new AccountCreatedByUser($user));

可以手动找到触发事件的文档here