-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_cacheFile.php
104 lines (83 loc) · 2.88 KB
/
_cacheFile.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
declare(strict_types=1);
/*
* This file is part of the QuidPHP package <https://quidphp.com>
* Author: Pierre-Philippe Emond <emondpph@gmail.com>
* License: https://github.com/quidphp/base/blob/master/LICENSE
*/
namespace Quid\Base;
// _cacheFile
// trait that provides methods to get or set a cached value from a file
trait _cacheFile
{
// cacheFile
protected static string $cacheFile; // dirname pour le storage, peut être changé par classe mais il faut répéter cette propriété
// cacheFile
// retourne la cache si existante, sinon crée la cache à partir de la closure sans argument
// si callable est null, unset
final public static function cacheFile($key,?\Closure $closure=null,bool $cache=true)
{
$return = null;
if($cache === true)
{
$key = Obj::cast($key);
$key = Str::cast($key,'-');
if(is_string($key) && strlen($key))
{
$key = str_replace('.','_',$key);
$key = Path::safeBasename($key);
$storage = static::getCacheFileStorage();
$path = Path::addBasename($key,$storage);
if($closure === null)
$return = File::unlink($path);
else
{
if(File::isReadable($path))
{
$get = File::get($path);
if(is_string($get))
$return = Crypt::unserialize($get);
}
else
{
$return = $closure();
$set = Crypt::serialize($return);
File::set($path,$set);
}
}
}
}
elseif(!empty($closure))
$return = $closure();
return $return;
}
// getCacheFileStorage
// retourne le chemin du storage pour la classe
// va envoyer une exception si cacheFile est toujours null
final public static function getCacheFileStorage():string
{
$return = Finder::normalize(static::$cacheFile);
$class = str_replace('\\','',static::class);
$return = Str::replace(['%class%'=>$class],$return);
return $return;
}
// setCacheFileStorage
// permet de changer le chemin du storage pour la file cache
final public static function setCacheFileStorage(string $value):void
{
static::$cacheFile = $value;
}
// emptyCacheFile
// efface tous les fichiers de cache pour la classe
final public static function emptyCacheFile():bool
{
return Dir::emptyAndUnlink(static::getCacheFileStorage());
}
// allCacheFile
// retourne tous les fichiers de cache pour la classe
final public static function allCacheFile():array
{
return Dir::get(static::getCacheFileStorage());
}
}
?>