properties = new Collection; if (auth()->check()) { $this->addProperty(auth()->user()->id); $this->addProperty(Prefs::lastActivity()); } } /** * @param $property */ public function addProperty($property) { $this->properties->push($property); } /** * @return mixed */ public function get() { return Cache::get($this->md5); } /** * @return string */ public function getMd5(): string { return $this->md5; } /** * @return bool */ public function has(): bool { if (getenv('APP_ENV') == 'testing') { return false; } $this->md5(); return Cache::has($this->md5); } /** * @param $data */ public function store($data) { Cache::forever($this->md5, $data); } /** * @return void */ private function md5() { $this->md5 = ''; foreach ($this->properties as $property) { if ($property instanceof Collection || $property instanceof EloquentCollection) { $this->md5 .= json_encode($property->toArray()); continue; } if ($property instanceof Carbon) { $this->md5 .= $property->toRfc3339String(); continue; } if (is_object($property)) { $this->md5 .= $property->__toString(); } if (is_bool($property) && $property === false) { $this->md5 .= 'false'; } if (is_bool($property) && $property === true) { $this->md5 .= 'true'; } $this->md5 .= json_encode($property); } Log::debug(sprintf('Cache string is %s', $this->md5)); $this->md5 = md5($this->md5); Log::debug(sprintf('Cache MD5 is %s', $this->md5)); } }