Symfony2中的"维护网站"页面

svp*_*dga 9 php symfony

如何在Symfony2 Web应用程序中轻松清晰地实现"维护网站"页面?

我已经为Symfony 1找到了一些关于它的东西,但没有为Symfony2找到任何东西.

谢谢.

Mar*_*der 20

我按照本教程.这非常简单直接.这是我所需要的.您只需更改参数然后清除prod缓存,您仍然可以在dev或测试环境中访问该应用程序.

在你的parameters.yml中添加:

parameters:
    maintenance: false #turn it to true to enable maintenance
    underMaintenanceUntil: tomorrow 8 AM
Run Code Online (Sandbox Code Playgroud)

然后定义一个服务:

services:
    acme.listener.maintenance:
        class: Acme\DemoBundle\Listener\MaintenanceListener
        arguments:
            container: "@service_container"
        tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Run Code Online (Sandbox Code Playgroud)

最后是事件监听器:

<?php

namespace Acme\DemoBundle\Listener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DependencyInjection\ContainerInterface;

class MaintenanceListener
{
    private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $maintenanceUntil = $this->container->hasParameter('underMaintenanceUntil') ? $this->container->getParameter('underMaintenanceUntil') : false;
        $maintenance = $this->container->hasParameter('maintenance') ? $this->container->getParameter('maintenance') : false;

        $debug = in_array($this->container->get('kernel')->getEnvironment(), array('test', 'dev'));

        if ($maintenance && !$debug) {
            $engine = $this->container->get('templating');
            $content = $engine->render('::maintenance.html.twig', array('maintenanceUntil'=>$maintenanceUntil));
            $event->setResponse(new Response($content, 503));
            $event->stopPropagation();
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

然后你只需添加引用的模板文件$content = $engine->render('::maintenance.html.twig', array('maintenanceUntil'=>$maintenanceUntil));和你的罚款.使用{{ maintenanceUntil }}以显示parameters.yml定义的消息.