Magento 2 Определяет режим обслуживания
Я на самом деле пытаюсь найти функцию, которая должна определять, находится ли веб-сайт в режиме обслуживания или нет. У кого-нибудь есть ответ, пожалуйста? Я знаю, что мы можем сделать это в консоли, но мне это нужно в одном из моих блоков.
4 answers
Допустим, вы хотите обнаружить это внутри одного из ваших классов.
Вам нужно добавить к нему эту зависимость Magento\Framework\App\MaintenanceMode
.
Сделайте свой конструктор класса похожим на это:
protected $maintenanceMode;
public function __construct(
....
\Magento\Framework\App\MaintenanceMode $maintenanceMode,
....
) {
....
$this->maintenanceMode = $maintenanceMode;
....
}
Затем вы можете вызвать внутри своего класса следующее:
$flag = $this->maintenanceMode->isOn();
Вы даже можете указать ip-адрес в качестве параметра для isOn
Если вы найдете var/.обслуживание.файл флага, то ваш магазин Magento 2 находится в режиме обслуживания. Это скрытый файл, поэтому вам может потребоваться включить отображение скрытых файлов.
Magento определяет режим обслуживания следующим образом:
Если var/.техническое обслуживание.флаг не существует, режим обслуживания выключен, и Magento работает нормально.
В противном случае режим обслуживания включен, если не существует var/.maintenance.ip
Использование команд:
magento maintenance:enable [--ip=<ip address> ... --ip=<ip address>] | [ip=none]
magento maintenance:disable [--ip=<ip address> ... --ip=<ip address>] | [ip=none]
magento maintenance:status
Когда включен режим обслуживания, Magento создает файл флага в var/.maintenance.flag
Проверьте этот файл
vendor/magento/framework/App/MaintenanceMode.php
Функция
/**
* Sets maintenance mode "on" or "off"
*
* @param bool $isOn
* @return bool
*/
public function set($isOn)
{
if ($isOn) {
return $this->flagDir->touch(self::FLAG_FILENAME);
}
if ($this->flagDir->isExist(self::FLAG_FILENAME)) {
return $this->flagDir->delete(self::FLAG_FILENAME);
}
return true;
}
Чтобы проверить, включен ли режим обслуживания, проверьте эту функцию
/**
* Checks whether mode is on
*
* Optionally specify an IP-address to compare against the white list
*
* @param string $remoteAddr
* @return bool
*/
public function isOn($remoteAddr = '')
{
if (!$this->flagDir->isExist(self::FLAG_FILENAME)) {
return false;
}
$info = $this->getAddressInfo();
return !in_array($remoteAddr, $info);
}