CodeIgniterの学習 68 - Zend_RegistryをCodeIgniter上で簡単に呼び出すラッパーを作る
こんにちは、もうすぐ春ですね。僕にもそろそろ春は来るのでしょうか?
今日は CodeIgniter上でZend_Registryを使ってみることにする。
(過去のエントリーで既にZend Frameworkは使える状態にしているので、使えるようにするまでの説明は省略。詳しくはそっちをみてね。)
たまには道を外れたいときもあるさ
極たまにだけど、どうしても事情があって$GLOBALSを使いたくなるようなケースってあるんだよね。
でも$GLOBALSは使いたくない。
そんなときのZend_Registry。
マニュアル(http://framework.zend.com/manual/ja/zend.registry.html)を引用すると、
レジストリは、アプリケーション空間でオブジェクトや変数を保存するためのコンテナです。 変数をレジストリに保存すると、 そのオブジェクトはアプリケーション内でいつでも利用できるようになります。 この仕組みは、グローバルなストレージを使用する代わりに使用できます。
ということで、早速使ってみることにした。
そのまま使っては面白くないしブログのネタにもならないので、
CodeIgniterのヘルパーとしてラップしてみた。
ラッパーソース:application/helpers/registry_helper.php
ほぼサンプルのまま。これだけで$GLOBALSの代わりになるなんてとても嬉しいワン。<?php if ( !defined( 'BASEPATH' ) ) exit( 'No direct script access allowed' ); require_once( 'Zend/Registry.php' ); //ヘルパーにソースを寄せておくため敢えてここでrequireしておく // Zendレジストリに一時データを保存 if ( ! function_exists( 'reg_set' ) ) { function reg_set( $key = '', $value = '' ) { if ( $key ) { Zend_Registry :: set( $key, $value ); } } } // Zendレジストリから一時データを取得 if ( ! function_exists( 'reg_get' ) ) { function reg_get( $key = '' ) { return reg_isset($key) ? Zend_Registry :: get( $key ) : null ; } } // Zendレジストリから一時データを全件取得 if ( ! function_exists( 'reg_get_all' ) ) { function reg_get_all() { $ret_arr = array(); $registry = Zend_Registry :: getInstance(); foreach ( $registry as $key => $value ) { $ret_arr[$key] = $value; } return $ret_arr; } } // Zendレジストリに該当キーで一時データが保存されているかの確認 if ( ! function_exists( 'reg_isset' ) ) { function reg_isset($key='') { return $key ? Zend_Registry :: isRegistered( $key ) : false ; } } /** * End of file registry_helper.php */ /** * Location: ./application/helpers/registry_helper.php */ ?>
Zend_Registry内にはいろんなメソッドがあるみたいだけど、
- reg_get
- reg_set
- reg_get_all
- reg_isset
でラップした4つでとりあえず事足りそう。これなら鳥頭の俺でもすぐに使える。
動作確認
いつでもどこでも気軽に呼べるように(いや呼ばないけど)
application/config/autoload.phpに、
$autoload['helper'] = array('registry',…
と、レジストリーヘルパーを読み込むようにしておく。
適当なコントローラー
適当なコントローラーとビューで動作確認してみる。
(ちなみにこのサンプルだったら、Zend_Registryを使うメリットは全く無い。)
<?php if ( !defined( 'BASEPATH' ) ) exit( 'No direct script access allowed' ); //上略 function index() { reg_set('indexhaorenoyome','いんでっくすたんは俺の嫁'); reg_set('sogebu','そげぶ'); //中略 } //下略 ?>
適当なビュー
こんな感じで呼び出してみる。
ここではビューで呼び出したが、別にモデルでもライブラリでもなんでもいい。(コア部分でヘルパーが呼みこまれる前の箇所は除く。)
<h2>Zend_RegistryをCodeIgniterのヘルパー化してみたテスト</h2> (このサンプルではあまり意味が無いけど、$GLOBALSの代わりに使いたいときはある。) <dl> <dt> reg_get('indexhaorenoyome') の結果 </dt> <dd class="info red"> <?= reg_get('indexhaorenoyome') ?></dd> <dt> reg_isset('sogebu') の結果 </dt> <dd class="info green"> <?= reg_isset('sogebu') ?> </dd> <dt> var_dump(reg_get_all()) の結果 </dt> <dd class="info yellow"> <?php var_dump(reg_get_all()) ?> </dd> </dl>
動作画面
うむ、成功。
今月の更新は週1回位かな。