Есть ли способ удалить наблюдателя модели, который добавляется с помощью
$model->observe(new ObserverObject)
Может быть, что-то вроде
$model->observers['ObserverObject']->remove()
Спасибо
Есть ли способ удалить наблюдателя модели, который добавляется с помощью
$model->observe(new ObserverObject)
Может быть, что-то вроде
$model->observers['ObserverObject']->remove()
Спасибо
Вы можете проверить название своего события, выполнив:
dd( $model->getEventDispatcher()->getListeners() );
И удалите его, используя:
$model->getEventDispatcher()->forget($event);
foreach ($model->getObservableEvents() as $event) $model->getEventDispatcher()->forget("MyAwesomeObserver@$event")
- person Ken; 26.03.2020
Model::observe
звонком по цепочке. Это сработало для меня: foreach ($model->getObservableEvents() as $event) $model->getEventDispatcher()->forget("eloquent.{$event}: " . get_class($model)); }
- person AlbinoDrought; 15.01.2021
Ларавель 5.8
У меня есть AccountObserver, который наблюдает за процессом создания в моей AccountModel:
class AccountObserver
{
public function creating(AccountModel $account)
{
....
}
}
Чтобы отключить это, сначала загрузите диспетчер событий (через любую красноречивую модель), а затем скажите ему, что нужно забыть. Это работает для любого метода наблюдателя:
$eventDispatcher = AccountModel::getEventDispatcher();
$eventDispatcher->forget('eloquent.creating: App\Models\AccountModel');
Если вы хотите вспомнить это снова:
AccountModel::observe(AccountObserver::class);