我有一个事件,只要有人在我的网站上注册新帐户,就会发出欢迎电子邮件。
我的问题是,我需要在我的管理部分创建一个“创建用户”页面。现在,每次我从管理部分创建用户时,电子邮件仍然会发出一封欢迎新用户的电子邮件。
这样就可以了,但我需要那封电子邮件来说明其他内容。
我不希望在从管理面板创建用户时触发欢迎电子邮件。
如何控制此事件发送电子邮件?
代码几乎按以下顺序进行:
<强>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。接下来是 Markdown 电子邮件。
@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
];
在我的管理员保存用户功能 | 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.');
}
任何帮助将不胜感激,我已经与这个问题斗争了一段时间了。
最佳答案
您可以尝试为您的用户模型添加一个新的可为空的列,这将检查用户是否是由管理员或其他人添加的;
$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));
}
}
关于php - 如何控制 Laravel 中的事件触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176551/