Смотрю трейт RegistersUsers в глубинах vendor-a и метод register(). Вот он: PHP: public function register(Request $request) { $this->validator($request->all())->validate(); event(new Registered($user = $this->create($request->all()))); $this->guard()->login($user); return $this->registered($request, $user) ?: redirect($this->redirectPath()); } Создается event, но как я понял полезного он ничего не делает и listener-а у него нет. Вот он Registered event: PHP: class Registered { use SerializesModels; /** * The authenticated user. * * @var \Illuminate\Contracts\Auth\Authenticatable */ public $user; /** * Create a new event instance. * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return void */ public function __construct($user) { $this->user = $user; } } Более того, если в трейте RegisterUsers закомментить создание event-а, то регистрация тоже успешно проходит: PHP: public function register(Request $request) { $this->validator($request->all())->validate(); //event(new Registered($user = $this->create($request->all()))); $user = $this->create($request->all()); $this->guard()->login($user); return $this->registered($request, $user) ?: redirect($this->redirectPath()); } Я не понимаю, зачем в трейте event(); На будущее, чтобы пользователь laravel мог в EventServiceprovider прописать listener? PHP: protected $listen = [ 'Illuminate\Auth\Events\Registered' => [ 'App\Listeners\LogRegisteredUser' ];
Event и не должен делать ничего полезного - это просто событие, в данном случае событие создания нового пользователя. Будете вы как-то на него реагировать или нет - уже ваше дело, просто оно есть.
Тогда в контроллере RegisterController буду использовать трейт RegistersUsers, переопределять метод register(), только без event()
Тебе что, мешает сильно? Это никак не сказывается на производительности на современной машине, но даёт возможность в будущем навесить всякого-разного на регистрацию пользователя.
Нет, не мешает, просто первый раз столкнулся с event и listeners и непонятно в каких случаях они пригодятся. Если делаем однотипные задачи в конкретный момент выполнения кода, то можно создать .php файл и инжектировать его в нужную функцию.
На одно событие можно повесить нескольких слушателей, таким образом разделив логику на несколько классов (т.е. в каждом из классов будет сосредоточено что-то одно, поэтому проще найти ошибку). Потом, можно со временем довешивать слушателей при расширении, не меняя код этого трейта. Достигается расширяемость. С другой стороны, есть противники архитектуры, основанной на событиях, утверждающие, что использование событий делает логику слишком нелинейной. Я не разделяю эту точку зрения, и использую события в своём коде, но ограниченно. Если ими злоупотреблять, то действительно потеряешь нить.