[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。

原文地址:https://www.cnblogs.com/novice-programmer/p/11609388.html

时间: 2024-10-03 09:38:32

[Symfony 4.3] 创建一个站点维护模式的相关文章

Confluence 6 创建一个空间

在 Confluence 中并不限制你可以创建多少空间.你可以选择为你每一个小组,项目都创建一个空间,或者你也可以将这 2 者混合在一起.所有的这些都基于你的需求来决定的. 每一个 Confluence 中的空间都是具有自主权,这表示在每一个空间中,你都可以: 拥有空间自己的主页,博客页面,页面,评论,文件附件和 RSS 新闻源. 可以自定义不同的配色主题,标志和边栏. 可以拥有空间自己的的权限,这个是通过空间管理员进行设置的. 例如,一个 IT 小组可以创建一个自己的总体空间,同时包括所有他们

用 Umbraco 开发网站[2]:使用 Umbraco创建一个基本站点(上)

经过前面的准备,我们已经充分具备了开发一个 Umbraco 站点的条件,Let's go on~~~ Umbraco 官网提供了一个学习的静态模板资源包,蛮多前往的人还真不容易找到,地址在下面: https://github.com/verekia/initializr-template/archive/master.zip 一.创建第一个[Document Type](文档类型) 1.制作任何站点的第1步都是创建一个“文档类型”.文档类型是数据的容器,在这里您可以添加编辑数据字段/属性,用户可

【真的是随笔】如何利用htaccess把网站流量引到一个页面上(站点维护页效果)

咕咕咕,好久没来博客园转悠了,最近(这个最近好长啊)一直没时间写博(事实上也不知道写点什么有逼格的东西),所以一直都在潜水,,,(此处省略n字) 好了切入正题,关于如何把网站的所有流量引向一个页面的方法有很多,比如像wordpress可以开维护模式或者装一个插件,ThinkPHP应该可以在前面设置一个路由吧(我没试过,只是估计可以),但对于apache来说有种更方便的方法,就是写.htaccess..但是关于怎么写网上有很多资料,但是我怎么搜到的都是错误的(放上目录直接500或者重定向循环了,我

django创建一个简单的web站点

一.新建project 使用Pycharm,File->New Project-,选择Django,给project命名 (project不能用test命名) 新建的project目录如下: settings.py:工程相关的配置 urls.py:网站访问入口,对应到views wigs.py:部署相关 manage.py:执行命令 templates:html等静态文件 备注:新建工程后需要安装django的lib包,然后验证django是否安装成功 >>> import dja

使用 CodeIgniter 创建一个简单的 Web 站点

原文:使用 CodeIgniter 创建一个简单的 Web 站点 参考源自: http://www.ibm.com/developerworks/cn/web/wa-codeigniter/index.html 我的第一个 CodeIgniter 项目(除HelloWorld外),现整理记录下来. 相关环境: 系统:ubuntu-10.04.3 Apache:httpd-2.4.7 PHP:php-5.4.22 MySQL:mysql-5.6.16 CI:CodeIgniter-2.2.0 目标

CodeIgniter框架——创建一个简单的Web站点

目标 使用 CodeIgniter 创建一个简单的 Web 站点.该站点将有一个主页,显示一些宣传文本和一个表单,该表单将发布到数据库表中. 按照 CodeIgniter 的术语,可将这些需求转换为以下内容: 一个控制器,仅包含少数功能(可使用默认的 Welcome 控制器) 一个模型(以及一个数据库表),用于存储联系人信息 一个主视图,包含一些支持 NO1.创建数据库表和模型 从模型入手可帮助理解底层数据库表,之后再开始布设功能和 UI.如果对表将存储哪些内容认识不深,设计与表交互的表单将十分

利用django创建一个投票网站(五)

创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测试是什么? 测试,是用来检查代码正确性的一些简单的程序. 测试在不同的层次中都存在.有些测试只关注某个很小的细节(某个模型的某个方法的返回值是否满足预期?),而另一些测试可能检查对莫个软件的一系列操作(某一用户输入序列是否造成了预期的结果?).其实这和我们在教程的第一部分(zh)里做的并没有什么不同

创建一个简单的WCF程序

WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中,我们把承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting).在我们的计算服务应用中,采用了两种服务寄宿方式:通过自我寄宿(Self-Hosting)的方式创建一个控制台应用作为服务的宿主(寄宿进程为Hosting.exe):通过IIS寄宿方式将服务寄宿于IIS中(寄宿进程为IIS的工作进行W3wp.exe).客户端通过另一个控制台应用模拟(进程为Client.exe).接下来,我们就一步一步来构

创建一个守护进程

一.概述:守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是随系统启动而存在,随系统关闭而消失的进程(也就是开机之后就会存在,关机才消失).守护进程是一种很有用的进程,Linux的大多数服务器就是用守护进程实现的. 在终端运行命令:ps axj | head 参数a表示不仅列出当前用户进程,也列出所有其它用户进程. 参数x表示不仅列出有控制终端的进程,也列出所有无控制终端的进程. 参数j表示列出与作业控制