В проекте Laravel 5.5 у меня есть класс Person и класс Student.Класс Student расширяет класс Person.У меня есть куча вещей, которые должны произойти, когда создается новый человек, и куча вещей, которые должны произойти, когда создается новый студент (который, конечно, тоже человек).
Мой класс выглядитчто-то вроде этого ...
class Person extends Model {
protected $dispatchesEvents = [
'created' => PersonJoins::class
];}
.
class Student extends Person {
protected $dispatchesEvents = [
'created' => StudentIsCreated::class,
];}
Когда создается новый экземпляр Student, событие StudentIsCreated вызывается, а событие PersonJoins - нет.
Обходной путь - изменить «созданный» в одной из моделей на «сохраненный», после чего оба события будут запущены.Из этого кажется очевидным, что происходит.Элемент 'create' в массиве $ dispatchesEvents в модели Person перезаписывается тем же самым в модели Student.Даже если просто набрать это, кажется, что решение должно быть очевидным, но я просто не вижу его.
Итак, мой вопрос заключается в следующем ... Как у меня есть событие, инициированное «созданным» на двух моделях, один из которых расширяет другой?
Спасибо.Дэвид.
РЕДАКТИРОВАТЬ: После прочтения @hdifen ответ.Моя модель студента теперь выглядит следующим образом ...
class Student extends Person
{
protected static function boot()
{
parent::boot();
static::created(function($student) {
\Event::Fire('StudentCreated', $student);
});
}
}
и в App\Events\StudentCreated.php
у меня есть ...
class StudentCreated
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($student)
{
echo ("\r\nStudentCreated event has fired");
$this->student = $student;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('Student-Is-Created-Channel');
}
}
Но событие не 'похоже, уволен.Я что-то не так делаю?