Zend Framework 2 — запись в конфигурационный файл

В конфигурационном файле я сохранил адрес сервера, на который полагается мой сайт.

В случае отказа этого сервера я хочу использовать резервный сервер. (навсегда, не только по этому запросу). Поэтому, если сервер1 не работает, я хочу использовать сервер2.

Я нашел лучший способ изменить адрес в моем файле конфигурации. Но, как я знаю, Zend Framework 2 не может записывать файлы конфигурации.

Есть идеи?

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
0

Другие решения

Файлы конфигурации должны использоваться только для статических переменных.

Для реализации этого было бы лучше создать сервис, который возвращает вам адрес на сервер. Например, ServerAddressProvider,

$service = $serviceManager->get('Application\Service\ServerAddressProvider');
$address = $service->getServerAddress();

Внутри вашего сервиса вы можете добавить свою собственную логику, которая возвращает правильный адрес сервера.

Внутри сервера вы можете, например, пропинговать сервер перед возвратом адреса, чтобы проверить его работоспособность и вернуть альтернативный (резервный) сервер, если сервер на мгновение недоступен.

0

По вопросам рекламы [email protected]