File "CacheConfigValidator.php"
Full Path: /var/www/drive/foundation/src/Settings/Validators/CacheConfigValidator.php
File size: 1.77 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Common\Settings\Validators;
use Common\Settings\DotEnvEditor;
use Exception;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
use Throwable;
class CacheConfigValidator
{
const KEYS = ['cache_driver'];
public function fails($settings)
{
$this->setConfigDynamically($settings);
try {
$driverName = Arr::get(
$settings,
'cache_driver',
config('cache.default'),
);
$driver = Cache::driver($driverName);
$driver->put('foo', 'bar', 1);
if ($driver->get('foo') !== 'bar') {
return $this->getDefaultErrorMessage();
}
} catch (Exception $e) {
return $this->getErrorMessage($e);
} catch (Throwable $e) {
return $this->getErrorMessage($e);
}
}
private function setConfigDynamically($settings)
{
app(DotEnvEditor::class)->write(
Arr::except($settings, ['cache_driver']),
);
}
private function getErrorMessage($e): array
{
$message = $e->getMessage();
if (Str::contains($message, 'apc_fetch')) {
return ['cache_group' => "Could not enable APC. $message"];
} elseif (Str::contains($message, 'Memcached')) {
return ['cache_group' => "Could not enable Memcached. $message"];
} elseif (Str::contains($message, 'Connection refused')) {
return ['cache_group' => 'Could not connect to redis server.'];
} else {
return $this->getDefaultErrorMessage();
}
}
private function getDefaultErrorMessage(): array
{
return ['cache_group' => 'Could not enable this cache method.'];
}
}