2014-01-07 4 views
8

symfony2ウェブアプリケーションで「メンテナンス中のウェブサイト」のページをeasely明確に実装するにはどうすればよいですか?Symfony2のメンテナンス中のウェブサイト

私はSymfony 1ではこれについて何かを見つけましたが、Symfony2では何も見つかりませんでした。

ありがとうございました。

+0

これは助けになるでしょうか? http://stackoverflow.com/questions/16029049/show-maintenance-page-when-lock-file-is-present私は解決策が掲載されていないことを知っていますが、それはあなたに見える場所の方向を与えることができます –

+0

解決策はフレームワークに関係なく私には同じです:サイトがメンテナンス中であるかどうかを記録するconfigファイルを用意してください。おそらく、どこかのフロントコントローラーのような低レベルでチェックし、HTMLページにリダイレクトします。 – halfer

答えて

20

これに続いて、tutorialが続きました。それは非常に簡単で簡単です。 これは私が必要としたものでした。パラメータを変更してプロダクトキャッシュをクリアするだけで、開発環境やテスト環境でアプリケーションにアクセスできます。あなたのparameters.ymlで

は、これを追加します。

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

そして最後にイベントリスナー:

parameters: 
    maintenance: false #turn it to true to enable maintenance 
    underMaintenanceUntil: tomorrow 8 AM 

を次にあなたがサービス定義

<?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(); 
     } 

    } 
} 

を次に、あなただけに持っています$content = $engine->render('::maintenance.html.twig', array('maintenanceUntil'=>$maintenanceUntil));とあなたの罰金に記載されているテンプレートファイルを追加してください。 parameters.ymlで定義されたメッセージを表示するには、{{ maintenanceUntil }}を使用してください。

+0

これをsymfony 2.7プロジェクトに追加しましたが、ymlのメンテナンスパラメータを変更した後にprodキャッシュをクリアすると正しく動作します。私はキャッシュをクリアしないと効果はありません。この追加のステップを避ける方法はありますか? – edditor

+0

短い答え、いいえ。パラメータもキャッシュされているようです。 –

+0

あなたは正しいです。私はそれをテストし、設定ファイルはキャッシュされます。しかし、ymlを変更してキャッシュをクリアするコマンドを作成する快適な解決策があるかもしれません。私は明日それを試してみるでしょう。 – edditor

関連する問題