[Symfony 4.3] 创建一个站点维护模式

Posted 哦?你是程式设计师?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Symfony 4.3] 创建一个站点维护模式相关的知识,希望对你有一定的参考价值。

透过Symfony框架来创建一个站点维护模式很简单。只需在用户请求的时候检查站点是否处在维护模式中。当维护模式启动时,所有的请求都会被重新定向致某个页面去。

 

可以在EventListener的 onKernelRequest做到这一点:

 

 1 <?php
 2 
 3 namespace App\EventListener;
 4 
 5 
 6 class MaintenanceListener
 7 {
10     public function onKernelRequest(RequestEvent $event)
11     {
12       // 逻辑放这里
13     }
14 }

 

去 service.yaml 创建一个新的parameter,然后注册你的 MaintenanceListener:

parameters:
    maintenance: true


services:

        App\EventListener\MaintenanceListener:
        tags:
            - { name: kernel.event_listener, event: kernel.request }
        arguments:
            $maintenance: ‘%maintenance%‘ 

 

maintenance 是维护模式的开关,绑定maintenance的值去 $maintenance变数,并把它带入 MaintenanceListener的 constructor里面:

 

<?php

namespace App\EventListener;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Twig\Environment;

class MaintenanceListener
{
    private $maintenance;
    private $twig;

    public function __construct($maintenance, Environment $twig)
    {
        $this->maintenance = $maintenance;
        $this->twig = $twig;
    }

    public function onKernelRequest(RequestEvent $event)
    {
        
        if($this->maintenance != true)
        {
            return;
        }

        $event->setResponse(new Response($this->twig->render(‘maintenance.html.twig‘), Response::HTTP_SERVICE_UNAVAILABLE));
        $event->stopPropagation();
    }
}

 

当网站收到用户请求时,会进入 onKernelRequest里并检查 maintenance 是否为 true。若maintenance为true,返回一个页面给用户,然后终止其它的event。

 

以上是关于[Symfony 4.3] 创建一个站点维护模式的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式对用户进行身份验证以进行 PhpUnit 功能测试 - 不受 Doctrine 管理 - Symfony 4.3

如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?

Magento 站点处于维护模式

Symfony 4.3 学说迁移问题

命名空间没有注册路径 [Symfony 4.3]

如何为 Symfony2 站点正确设置 Varnish?