Silex でメンテナンス画面表示

Silex の 4 つめのエクステンション。
Silex でメンテナンス画面を表示する。
GitHub - heavenshell/php-silex-maintenance: Show maintenance to client.

元ネタはこれ。
Silex で簡単メンテナンスモード - ぷぎがぽぎ


経緯

$app->before() でフックできたけど、Response を return としてもディスパッチされてしまうので、素直に id:brtRiver さんのを移植した。

<?php
require_once 'silex.phar';
require_once dirname(__DIR__) . '/src/MaintenanceExtension.php';

$app = new Silex\Application();
$app->register(new \MaintenanceExtension(), array(
    'maintenance.lock' => __DIR__ . '/maintenance',
    'maintenance.file' => __DIR__ . '/maintenance.html',
));
$app->get('/', function () use ($app) {
    return 'index';
});
$app->run();

'maintenance.lock' というキーに設定したファイルを設置すると、作動する仕組み。
この場合 カレントディレクトリに maintenance というファイルを設置する。
ファイルが存在しない場合、メンテナンス画面は表示しない。
デプロイツールとかで、デプロイする前に maintenance のファイルを置き、その後デプロイ、デプロイ完了後に削除というフローを想定している。


一応 Twig にも対応している。

<?php
$app = new Silex\Application();
$app->register(new Silex\Extension\TwigExtension(), array(
    'twig.path'       => __DIR__ . '/views',
    'twig.class_path' => '/Path/To/Twig'
)); 
$app->register(new \MaintenanceExtension(), array(
    'maintenance.lock' => __DIR__ . '/maintenance',
    'maintenance.file' => 'maintenance.twig',
));

TwigExtension を使用し、拡張子が twig の場合 /views/maintenance.twig を探し表示する。
※メンテ画面なんてテンプレートである必要はないから、普通に HTML ファイルで良いと思うけど。