ヘルパー関数
ヘルパーは、その名前のとおり、タスクの実行に役立つものです。各ヘルパーのファイルは、特定分野についての関数のコレクションです。 リンクを作成するのを支援する URL ヘルパー、フォームの要素を作成するのに役立つ フォームヘルパー、 様々なテキスト整形処理を行う Text ヘルパー、 クッキーを読み書きする Cookie ヘルパー、ファイルを取り扱うのに役立つ File ヘルパー などがあります。
CodeIgniter の中の大部分のシステムとは違い、ヘルパーはオブジェクト指向の形式で書かれていません。シンプルな手続き型の関数です。 各ヘルパー関数は、他の関数に依存することなく、特定のひとつのタスクを行います。
CodeIgniter はデフォルトでは、ヘルパーを読み込みません。ヘルパーを利用する最初のステップは、 それを読み込むことです。一旦読み込まれると、 コントローラ と ビュー の中でどこでも利用できます。
ヘルパーは通常は、 system/helpers ディレクトリまたは、application/helpers に格納されています。CodeIgniter は application/helpers ディレクトリを最初に認識します。このディレクトリが存在しない時や、読み込もうとするヘルパーがこのディレクトリの中にない場合、CodeIgniter は代わりにグローバルな system/helpers フォルダを探します。
ヘルパーの読み込み
ヘルパーファイルを読み込むのは、次のようなメソッドを使う、非常に単純なものです:
$this->load->helper('name');
ここでの name は、ヘルパーの名前になります。 .php ファイルの拡張子やファイル名についている"helper" をあらわす部分 [ 訳注: ヘルパーの物理ファイル名の末尾には「_helper」というサフィックスがついています ] は不要です。
たとえば、url_helper.php というファイル名の URL ヘルパー のファイルを読み込むには、次のようにします:
$this->load->helper('url');
ヘルパーは、利用する前にロードしさえすれば、コントローラのメソッドの中の(良いやり方ではありませんが、 あるいはビューファイルの)どこでロードしてもかまいません。コントローラのコンストラクタでロードすれば、 どのメソッドでも利用できるようになりますし、特定のメソッド内で必要な時だけ読み込むこともできます。
Note: ヘルパーの読み込みメソッドは、値を返さないので、変数に返り値を代入しようとしないでください。例示したように使用するにとどめてください。
複数のヘルパーを読み込む
一つ以上のヘルパーを読み込む必要がある場合は、次のように、配列の中で指定することができます:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
ヘルパーの自動読み込み
あるヘルパーがアプリケーションでグローバルに必要とされることがわかった時には、システムを初期化するときに自動読み込みするよう、CodeIgniter に対して通知しておくことができます。 application/config/autoload.php ファイルを開き、そこにある配列の autoload にヘルパーを追加することで、そうすることが可能です。
ヘルパーの使用
使いたい関数が含まれるヘルパーファイルをまず読み込んだ後、通常の PHP の関数を利用するように呼び出します。
たとえば、ビューのファイルで anchor() 関数を使ってリンクを生成するには、次のようにします:
<?php echo anchor('blog/comments', 'ここをクリック');?>
ここでの "ここをクリック" はリンクの名前になり、"blog/comments" は、リンク先のコントローラ/メソッドの URI になります。
ヘルパー の "拡張"
ヘルパーを "拡張" するには、MY_ (この項目は、変更可能です。下記をご覧ください。) とプリフィックスを付加し、それ以外は既存のヘルパーと全く同じ名前をつけて、application/helpers/ フォルダにファイルを作成してください。
既存のヘルパーにいくつかの機能を追加する - 恐らくひとつかふたつの関数を追加するか、特定のヘルパー関数が どのように動作するかを変更する - だけだとすると、ヘルパー全体をユーザバージョンに置き換えてしまうのは、やり過ぎです。こういう場合には、ヘルパーを単に "拡張"する方がベターです。ヘルパー関数は、手続き型で、それぞれ独立しており、 通例のプログラミング上の意味では、拡張(継承)できません。ですので、ここでの"拡張"という言葉は、広い意味で使っています。 こういった意味で、ヘルパーが提供する関数を追加したり、もともとのヘルパー関数がどのように動作するかを変更することができます。
たとえば、もともとの Array Helper を拡張するには、application/helpers/MY_array_helper.php という名前のファイルを作成し、関数を追加または上書き(オーバーライド)します:
// any_in_array() は、Array Helperの中にはありません。つまり、新しい関数を定義しています。
function any_in_array($needle, $haystack)
{
$needle = (is_array($needle)) ? $needle : array($needle);
foreach ($needle as $item)
{
if (in_array($item, $haystack))
{
return TRUE;
}
}
return FALSE;
}
// random_element() は、Array Helper に含まれています。つまり、もともとの関数を上書き(オーバーライド)しています
function random_element($array)
{
shuffle($array);
return array_pop($array);
}
独自のプリフィックスの設定
ヘルパーを "拡張する" ためのファイル名のプリフィックスは、ライブラリやコアクラスを拡張するときに使用するものと同じになります。独自のプリフィックスをセットするには、application/config/config.php ファイルを開き、次の項目を探してください:
$config['subclass_prefix'] = 'MY_';
CodeIgniter に組み込みの全ライブラリは、 CI_ というプリフィックスがつけられているので、これをユーザ指定のプリフィックスとして使用してはいけないという事を覚えておいてください。
この後は、何をすればよいですか?
目次の中に、利用可能な全ヘルパーファイルのリストが書いてあるのがわかると思います。それぞれを閲覧して、何をするものなのかを見てみてください。