CodeIgniterで簡単メンテナンスモード
なにかしらWebサービスを作成して継続していくならメンテナンスモードの作成は必須になると思います。とはいえこういった機能にあまり時間をかけたくないですよね。CodeIgniterなら簡単にメンテナンスモードを作成できます。
フック
CodeIgniterにはフック機能というのがありまして、フレームワークの要所々々でコアをハックすることなくフレームワークの動作を変更できます。今回はこの機能を利用してメンテナンスモードを作成します。
application/config/config.php
<?php $config['enable_hooks'] = TRUE; // フック機能を有効にする $config['maintenance'] = TRUE; // メンテナンスモードを有効にする場合はTRUE $config['maintenance_view'] = 'maintenance'; // メンテナンスモードで表示させるViewファイル
application/config/hooks.php
<?php $hook['pre_system'] = array( 'class' => 'Maintenance', 'function' => 'maintenance', 'filename' => 'Maintenance.php', 'filepath' => 'hooks', );
上記のように書くとpre_system(システムの実行の最初)に application/hooks(filepath)/Maintenance.php(filename) の Maintenance(class) クラスの maintenance(function) がコールされます。
application/hooks/Maintenance.php
@localdisk 2.0.3からEXTがdeprecatedになるらしいのです。URL
2011-05-26 00:47:52 via web to @localdisk
とのことですので EXT を .php に修正しました。
<?php class Maintenance { public function maintenance() { $config = load_class('Config', 'core'); if ($config->item('maintenance') === TRUE) { include APPPATH . 'views/' . $config->item('maintenance_view') . '.php'; exit(); } } }
余談ですが、フックを作成する上で注意することを述べておきます。CodeIgniterで機能を拡張する際、一番使用頻度が高い関数 get_instance ですが使用できるタイミング的には post_controller_constructor 以降になります。それ以前のポイントでフックを作成する場合は get_instance を使用しないように注意して下さい。 上記コードで include を使用しているのは CI_Loader->view が get_instance を使用しているためです。
application/view/maintenance.php
<!DOCTYPE HTML> <html lang="ja-JP"> <head> <title>maintenance</title> <meta charset="UTF-8"> </head> <body> <h1>maintenance</h1> </body> </html>
最後に View を作成。これで終了です。簡単ですね。
今回の内容も CI Utility Package に含まれています。興味のある方はご覧ください。