Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Commit a91e559

Browse files
committed
add caching for each menu with its pages
1 parent 7ce226c commit a91e559

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
## Config
3030
**config/simpleMenu.php**
3131
```php
32-
return [
32+
return [
3333
/*
3434
* the menu list classes to be used for "render()"
3535
*/
@@ -72,3 +72,4 @@ return [
7272
# ToDo
7373

7474
* [ ] CRUD Views for (roles/perms/pages/menus). *any help is appreciated*
75+
* [ ] clear cache through pivot table events. *any help is appreciated*

src/Models/Menu.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace ctf0\SimpleMenu\Models;
44

55
use Illuminate\Database\Eloquent\Model;
6+
use Illuminate\Support\Facades\Cache;
67
use Spatie\Translatable\HasTranslations;
78

89
class Menu extends Model
@@ -12,6 +13,25 @@ class Menu extends Model
1213
protected $guarded = ['id'];
1314
protected $with = ['pages'];
1415

16+
public static function boot()
17+
{
18+
parent::boot();
19+
20+
static::updated(function ($model) {
21+
foreach (array_keys(LaravelLocalization::getSupportedLocales()) as $code) {
22+
$name = "{$model->name}Menu-{$code}Pages";
23+
Cache::forget($name);
24+
}
25+
});
26+
27+
static::deleted(function ($model) {
28+
foreach (array_keys(LaravelLocalization::getSupportedLocales()) as $code) {
29+
$name = "{$model->name}Menu-{$code}Pages";
30+
Cache::forget($name);
31+
}
32+
});
33+
}
34+
1535
public function pages()
1636
{
1737
return $this->belongsToMany(Page::class);

src/Models/Page.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
namespace ctf0\SimpleMenu\Models;
44

55
use Baum\Node;
6+
use Illuminate\Support\Facades\Cache;
67
use Illuminate\Support\Facades\File;
8+
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
79
use Spatie\Permission\Traits\HasRoles;
810
use Spatie\Translatable\HasTranslations;
911

@@ -23,10 +25,24 @@ public static function boot()
2325
});
2426

2527
static::updated(function ($model) {
28+
foreach (array_keys(LaravelLocalization::getSupportedLocales()) as $code) {
29+
$model->menuNames->pluck('name')->each(function ($item) {
30+
$name = "{$item}Menu-{$code}Pages";
31+
Cache::forget($name);
32+
});
33+
}
34+
2635
File::delete(config('simpleMenu.routeListPath'));
2736
});
2837

2938
static::deleted(function ($model) {
39+
foreach (array_keys(LaravelLocalization::getSupportedLocales()) as $code) {
40+
$model->menuNames->pluck('name')->each(function ($item) {
41+
$name = "{$item}Menu-{$code}Pages";
42+
Cache::forget($name);
43+
});
44+
}
45+
3046
File::delete(config('simpleMenu.routeListPath'));
3147
});
3248
}

src/Traits/MenusTrait.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace ctf0\SimpleMenu\Traits;
44

55
use ctf0\SimpleMenu\Models\Menu;
6+
use Illuminate\Support\Facades\Cache;
67

78
trait MenusTrait
89
{
@@ -13,9 +14,9 @@ trait MenusTrait
1314
*/
1415
public function createMenus()
1516
{
16-
foreach (Menu::get()->pluck('name') as $name) {
17+
Menu::get()->pluck('name')->each(function ($name) {
1718
$this->viewComp($name);
18-
}
19+
});
1920
}
2021

2122
/**
@@ -49,6 +50,10 @@ public function viewComp($name)
4950
*/
5051
public function query($name)
5152
{
52-
return Menu::where('name', $name)->first()->pages()->where('url->'.app()->getLocale(), '!=', '')->get();
53+
Cache::rememberForever("{$name}Menu-".app()->getLocale().'Pages', function () use ($name) {
54+
return app(Menu::class)->where('name', $name)->first()->pages()->where('url->'.app()->getLocale(), '!=', '')->get();
55+
});
56+
57+
return cache("{$name}Menu-".app()->getLocale().'Pages');
5358
}
5459
}

0 commit comments

Comments
 (0)