From 917fa0a44543973a267fdf828941aeeb46851e8a Mon Sep 17 00:00:00 2001 From: Christoph Schweppe Date: Sat, 13 Apr 2019 13:29:42 +0200 Subject: [PATCH 1/4] Clear menu-cache when deleting items --- src/Models/Menu.php | 22 +++++++++++++++++++++- src/Models/MenuItem.php | 17 ++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/Models/Menu.php b/src/Models/Menu.php index 113057b240..1112d121f3 100644 --- a/src/Models/Menu.php +++ b/src/Models/Menu.php @@ -89,11 +89,31 @@ public static function display($menuName, $type = null, array $options = []) public function save(array $options = []) { //Remove from cache - \Cache::forget('voyager_menu_'.$this->name); + $this->removeMenuFromCache(); parent::save(); } + public static function destroy($ids) + { + if ($ids instanceof BaseCollection) { + $ids = $ids->all(); + } + + if (is_array($ids)) { + self::findOrFail($ids[0])->removeMenuFromCache(); + } else { + self::findOrFail($ids)->removeMenuFromCache(); + } + + parent::destroy($ids); + } + + public function removeMenuFromCache() + { + \Cache::forget('voyager_menu_'.$this->name); + } + private static function processItems($items) { $items = $items->transform(function ($item) { diff --git a/src/Models/MenuItem.php b/src/Models/MenuItem.php index 8df234360f..7f85cd81db 100644 --- a/src/Models/MenuItem.php +++ b/src/Models/MenuItem.php @@ -119,8 +119,23 @@ public function highestOrderMenuItem($parent = null) public function save(array $options = []) { //Remove from cache - \Cache::forget('voyager_menu_'.$this->menu->name); + $this->menu->removeMenuFromCache(); parent::save(); } + + public static function destroy($ids) + { + if ($ids instanceof BaseCollection) { + $ids = $ids->all(); + } + + if (is_array($ids)) { + self::findOrFail($ids[0])->menu->removeMenuFromCache(); + } else { + self::findOrFail($ids)->menu->removeMenuFromCache(); + } + + parent::destroy($ids); + } } From e416c58904ce1696b30805c53adce1b516967337 Mon Sep 17 00:00:00 2001 From: Christoph Schweppe Date: Tue, 23 Apr 2019 13:39:30 +0200 Subject: [PATCH 2/4] Use observer --- src/Models/Menu.php | 23 ----------------------- src/Models/MenuItem.php | 23 ----------------------- src/Observers/MenuObserver.php | 29 +++++++++++++++++++++++++++++ src/VoyagerServiceProvider.php | 16 ++++++++++++++++ 4 files changed, 45 insertions(+), 46 deletions(-) create mode 100644 src/Observers/MenuObserver.php diff --git a/src/Models/Menu.php b/src/Models/Menu.php index 1112d121f3..7cd139a753 100644 --- a/src/Models/Menu.php +++ b/src/Models/Menu.php @@ -86,29 +86,6 @@ public static function display($menuName, $type = null, array $options = []) ); } - public function save(array $options = []) - { - //Remove from cache - $this->removeMenuFromCache(); - - parent::save(); - } - - public static function destroy($ids) - { - if ($ids instanceof BaseCollection) { - $ids = $ids->all(); - } - - if (is_array($ids)) { - self::findOrFail($ids[0])->removeMenuFromCache(); - } else { - self::findOrFail($ids)->removeMenuFromCache(); - } - - parent::destroy($ids); - } - public function removeMenuFromCache() { \Cache::forget('voyager_menu_'.$this->name); diff --git a/src/Models/MenuItem.php b/src/Models/MenuItem.php index 7f85cd81db..a0b2e88cc5 100644 --- a/src/Models/MenuItem.php +++ b/src/Models/MenuItem.php @@ -115,27 +115,4 @@ public function highestOrderMenuItem($parent = null) return $order; } - - public function save(array $options = []) - { - //Remove from cache - $this->menu->removeMenuFromCache(); - - parent::save(); - } - - public static function destroy($ids) - { - if ($ids instanceof BaseCollection) { - $ids = $ids->all(); - } - - if (is_array($ids)) { - self::findOrFail($ids[0])->menu->removeMenuFromCache(); - } else { - self::findOrFail($ids)->menu->removeMenuFromCache(); - } - - parent::destroy($ids); - } } diff --git a/src/Observers/MenuObserver.php b/src/Observers/MenuObserver.php new file mode 100644 index 0000000000..f6bb7aa50b --- /dev/null +++ b/src/Observers/MenuObserver.php @@ -0,0 +1,29 @@ +updated($item); + } + } + + public function updated($item) + { + if (get_class($item) == MenuItem::class) { + $item = $item->menu; + } + $item->removeMenuFromCache(); + } + + public function deleted($item) + { + $this->updated($item); + } +} \ No newline at end of file diff --git a/src/VoyagerServiceProvider.php b/src/VoyagerServiceProvider.php index cce99c881c..6005a3e82d 100644 --- a/src/VoyagerServiceProvider.php +++ b/src/VoyagerServiceProvider.php @@ -19,8 +19,10 @@ use TCG\Voyager\Facades\Voyager as VoyagerFacade; use TCG\Voyager\FormFields\After\DescriptionHandler; use TCG\Voyager\Http\Middleware\VoyagerAdminMiddleware; +use TCG\Voyager\Models\Menu; use TCG\Voyager\Models\MenuItem; use TCG\Voyager\Models\Setting; +use TCG\Voyager\Observers\MenuObserver; use TCG\Voyager\Policies\BasePolicy; use TCG\Voyager\Policies\MenuItemPolicy; use TCG\Voyager\Policies\SettingPolicy; @@ -49,6 +51,11 @@ class VoyagerServiceProvider extends ServiceProvider 'browse_hooks', ]; + protected $observers = [ + Menu::class => MenuObserver::class, + MenuItem::class => MenuObserver::class, + ]; + /** * Register the application services. */ @@ -122,6 +129,8 @@ public function boot(Router $router, Dispatcher $event) $this->loadAuth(); + $this->loadObservers(); + $this->registerViewComposers(); $event->listen('voyager.alerts.collecting', function () { @@ -358,4 +367,11 @@ private function registerAppCommands() { $this->commands(Commands\MakeModelCommand::class); } + + private function loadObservers() + { + foreach ($this->observers as $model => $observer) { + $model::observe($observer); + } + } } From 17fd9d9c34966e035617aed2695b9ecfc636b4dd Mon Sep 17 00:00:00 2001 From: Christoph Schweppe Date: Sat, 27 Apr 2019 10:36:43 +0200 Subject: [PATCH 3/4] Use inline events --- src/Models/Menu.php | 13 +++++++++++++ src/Models/MenuItem.php | 17 +++++++++++++++++ src/Observers/MenuObserver.php | 29 ----------------------------- src/VoyagerServiceProvider.php | 15 --------------- 4 files changed, 30 insertions(+), 44 deletions(-) delete mode 100644 src/Observers/MenuObserver.php diff --git a/src/Models/Menu.php b/src/Models/Menu.php index 7cd139a753..5b2f2b317c 100644 --- a/src/Models/Menu.php +++ b/src/Models/Menu.php @@ -16,6 +16,19 @@ class Menu extends Model protected $guarded = []; + public static function boot() + { + parent::boot(); + + static::saved(function ($model) { + $model->removeMenuFromCache(); + }); + + static::deleted(function ($model) { + $model->removeMenuFromCache(); + }); + } + public function items() { return $this->hasMany(Voyager::modelClass('MenuItem')); diff --git a/src/Models/MenuItem.php b/src/Models/MenuItem.php index a0b2e88cc5..111ad0bbfa 100644 --- a/src/Models/MenuItem.php +++ b/src/Models/MenuItem.php @@ -21,6 +21,23 @@ class MenuItem extends Model protected $translatable = ['title']; + public static function boot() + { + parent::boot(); + + static::created(function ($model) { + $model->menu->removeMenuFromCache(); + }); + + static::saved(function ($model) { + $model->menu->removeMenuFromCache(); + }); + + static::deleted(function ($model) { + $model->menu->removeMenuFromCache(); + }); + } + public function children() { return $this->hasMany(Voyager::modelClass('MenuItem'), 'parent_id') diff --git a/src/Observers/MenuObserver.php b/src/Observers/MenuObserver.php deleted file mode 100644 index f6bb7aa50b..0000000000 --- a/src/Observers/MenuObserver.php +++ /dev/null @@ -1,29 +0,0 @@ -updated($item); - } - } - - public function updated($item) - { - if (get_class($item) == MenuItem::class) { - $item = $item->menu; - } - $item->removeMenuFromCache(); - } - - public function deleted($item) - { - $this->updated($item); - } -} \ No newline at end of file diff --git a/src/VoyagerServiceProvider.php b/src/VoyagerServiceProvider.php index 6005a3e82d..8167313121 100644 --- a/src/VoyagerServiceProvider.php +++ b/src/VoyagerServiceProvider.php @@ -22,7 +22,6 @@ use TCG\Voyager\Models\Menu; use TCG\Voyager\Models\MenuItem; use TCG\Voyager\Models\Setting; -use TCG\Voyager\Observers\MenuObserver; use TCG\Voyager\Policies\BasePolicy; use TCG\Voyager\Policies\MenuItemPolicy; use TCG\Voyager\Policies\SettingPolicy; @@ -51,11 +50,6 @@ class VoyagerServiceProvider extends ServiceProvider 'browse_hooks', ]; - protected $observers = [ - Menu::class => MenuObserver::class, - MenuItem::class => MenuObserver::class, - ]; - /** * Register the application services. */ @@ -129,8 +123,6 @@ public function boot(Router $router, Dispatcher $event) $this->loadAuth(); - $this->loadObservers(); - $this->registerViewComposers(); $event->listen('voyager.alerts.collecting', function () { @@ -367,11 +359,4 @@ private function registerAppCommands() { $this->commands(Commands\MakeModelCommand::class); } - - private function loadObservers() - { - foreach ($this->observers as $model => $observer) { - $model::observe($observer); - } - } } From 414feea98198bf53ec7c008084d6f65d2c128b75 Mon Sep 17 00:00:00 2001 From: Christoph Schweppe Date: Sat, 27 Apr 2019 10:37:45 +0200 Subject: [PATCH 4/4] Update VoyagerServiceProvider.php --- src/VoyagerServiceProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/VoyagerServiceProvider.php b/src/VoyagerServiceProvider.php index 8167313121..cce99c881c 100644 --- a/src/VoyagerServiceProvider.php +++ b/src/VoyagerServiceProvider.php @@ -19,7 +19,6 @@ use TCG\Voyager\Facades\Voyager as VoyagerFacade; use TCG\Voyager\FormFields\After\DescriptionHandler; use TCG\Voyager\Http\Middleware\VoyagerAdminMiddleware; -use TCG\Voyager\Models\Menu; use TCG\Voyager\Models\MenuItem; use TCG\Voyager\Models\Setting; use TCG\Voyager\Policies\BasePolicy;