65 lines
1.8 KiB
PHP
Executable File
65 lines
1.8 KiB
PHP
Executable File
<?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.'];
|
|
}
|
|
}
|