В конфигурационном файле я сохранил адрес сервера, на который полагается мой сайт.
В случае отказа этого сервера я хочу использовать резервный сервер. (навсегда, не только по этому запросу). Поэтому, если сервер1 не работает, я хочу использовать сервер2.
Я нашел лучший способ изменить адрес в моем файле конфигурации. Но, как я знаю, Zend Framework 2 не может записывать файлы конфигурации.
Есть идеи?
Но, как я знаю, Zend Framework 2 не может записывать файлы конфигурации.
Да, оно может. Имеет целый Zend\Config\Writer
составная часть. Если вы используете файлы конфигурации массива php по умолчанию, вы можете изменить файл конфигурации следующим образом:
$path = 'config/autoload/local.php';
$config = include $path;
$config['key'] = 'new value';
$writer = new \Zend\Config\Writer\PhpArray();
$writer->toFile($path, $config);
Не забудьте удалить кеш конфигурации, если вы его используете.
Но я думаю, что есть лучший способ сделать это — вместо изменения файлов конфигурации, вы можете подготовить шаблон конфигурации для каждого сервера и легко поменять их местами. Так в config/autoload
каталог у вас будут файлы adresses.local.server1.php.dist
а также adresses.local.php.dist
содержит адрес конфигурации для каждого сервера, который вам нужен. Тогда, если вам нужно использовать config для server1, просто скопируйте его:
$ cp adresses.local.server1.php.dist adresses.local.php
Файлы конфигурации должны использоваться только для статических переменных.
Для реализации этого было бы лучше создать сервис, который возвращает вам адрес на сервер. Например, ServerAddressProvider
,
$service = $serviceManager->get('Application\Service\ServerAddressProvider');
$address = $service->getServerAddress();
Внутри вашего сервиса вы можете добавить свою собственную логику, которая возвращает правильный адрес сервера.
Внутри сервера вы можете, например, пропинговать сервер перед возвратом адреса, чтобы проверить его работоспособность и вернуть альтернативный (резервный) сервер, если сервер на мгновение недоступен.