Как контролировать события от стрельбы в Laravel - PullRequest
2 голосов
/ 17 мая 2019

У меня есть событие, которое отправляет приветственное письмо, когда кто-то регистрирует новую учетную запись на моем сайте.

Моя проблема в том, что мне нужно было создать страницу "Создать пользователя" в моем разделе администратора. Теперь каждый раз, когда я создаю пользователя из раздела администратора, электронная почта по-прежнему отправляет электронное письмо, приветствующее нового пользователя.

Это было бы хорошо, но мне нужно это письмо, чтобы сказать что-то еще.

Я не хочу, чтобы приветственное письмо срабатывало при создании пользователя из панели администратора.

Как я могу контролировать это событие, отправив электронное письмо?

Код в значительной степени идет в следующем порядке:

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 SAVE USER FUNCTION | 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 ]

3 голосов
/ 17 мая 2019

Вы можете попытаться, добавив новый столбец, который можно обнулять для вашей модели пользователя, который будет проверять, был ли пользователь добавлен администратором или кем-то еще;

 $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));
        }
    }
0 голосов
/ 17 мая 2019

Лично я бы представил два события вместо одного. Что-то вроде AccountCreatedByUser и AccountCreatedByAdmin. Эти события могут затем обрабатываться отдельными слушателями, которые будут отправлять отдельные электронные письма. Это будет означать, что вам придется запускать эти события вручную, а не в зависимости от встроенного события created. Это можно сделать так: event(new AccountCreatedByUser($user));

Документацию по стрельбе вручную можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...