とーますメモ

Ruby on Rails / Goなどの学習メモ

【CakePHP2.x】メンテナンスページを作成する方法

今更だが、古いCakePHP2.x系のソースを修正する必要があり、
メンテナンスモードを簡単に実装するため、以下のプラグインを使用。

github.com

ただ、TOPページはCakePHP3.x系のものっぽいので、
branchesをたどり、以下の2.x系のソースをダウンロードして使用する。
GitHub - fusic/maintenance at master

ソースコード一式をダンロードし、解凍後のフォルダを「Maintenance」とリネームして
app/Pluginに入れる。また自分の場合は、メンテナンス用のレイアウトも使用したかったため
以下のようにソースを修正または追加した。

[修正] app/Config/bootstrap.php

<?php
// メンテナンスモードプラグインの導入
CakePlugin::load('Maintenance');
// trueにするとメンテナンスモードになる
Configure::write('Maintenance.enable', false);

[修正] app/Controller/AppController.php

詳細は後述するが、
・メンテナンス用のコントローラ
・メンテナンス用のビュー
・メンテナンス用のレイアウト
を作成し、自分の開発環境からのIPを除外する前提で、AppController.phpを編集する。
controllerに「メンテナンス用のコントローラ」、actionに「メンテナンス用のビュー」を設定
そして自分の開発環境IPを「xxx.xxx.xxx.xxx」に設定する。

<?php

        class AppController extends Controller {
            public $components = array(
               'Maintenance.Maintenance' => array(
                  'maintenanceUrl' => array(
                     'controller' => 'maitenance',
                     'action' => 'index'
                  ),
                  'allowedIp' => array('xxx.xxx.xxx.xxx', '127.0.0.1'), // allowed IP address when maintanance status
                  # 'allowedAction' => array('posts' => array('index'), 'users' => array('*')) // allowed action when maintanance status
                )
             );
        }

[追加] app/Plugin/Maintenance/Controller/MaintenanceController.php

<?php
App::uses('AppController', 'Controller');

class MaintenanceController extends AppController {
	public function index() {
		$this->autoLayout = false;
		$this->layout = 'maintenance';
	}
}

[追加] app/Plugin/Maintenance/View/Maintenance/index.ctp

※任意の文字を設定

現在システムメンテナンス中です。今しばらくお待ち下さい。

[追加] app/Plugin/Maintenance/View/Layouts/default.ctp

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>メンテンナンス</title>
</head>
<body>
  <?php echo $this->fetch('content'); ?>
</body>
</html>


これで準備は完了。
メンテナンスモードにするには、
app/Config/bootstrap.phpの以下をtrueにすればOK

<?php
Configure::write('Maintenance.enable', true);

タイマー設定もでき、「app/tmp/maintanance」のファイルを作成し、
ファイル内に以下のように設定できることでタイマー設定ができる。

例1: Maintenance 2011/1/1 ~ 2011/1/3

2011-01-01 00:00:00,2011-01-03 23:59:59

例2: Maintenance 2011/12/28 ~

2011-12-28 00:00:00,

例3: Maintenance ~ 2011/3/31 12:00

,2011-03-31 12:00:00

[参考]
GitHub - fusic/maintenance at master
メンテナンスモードを簡単実装できるMaintenance plugin | CakePHPクッキング
Maintenance plugin for CakePHPの組み込み : 儲かる気がしないスマホアプリ開発日誌