ヘルパ関数
ヘルパは、その名前のとおり、タスクの実行に役立つものです。各ヘルパのファイルは、特定分野についての関数のコレクションです。 リンクを作成するのを支援するURL ヘルパ、フォームの要素を作成するのに役立つ Form ヘルパ、 様々なテキスト整形処理を行うText ヘルパ、 クッキーを読み書きするCookie ヘルパ、ファイルを取り扱うのに役立つ File ヘルパ などがあります。
CodeIgniter の中の大部分のシステムとは違い、ヘルパはオブジェクト指向の形式で書かれていません。シンプルな手続き型の関数です。 各ヘルパ関数は、他の関数に依存することなく、特定のひとつのタスクを行います。
CodeIgniterはデフォルトでは、ヘルパを読み込みません。ヘルパを利用する最初のステップは、 それを読み込むことです。一旦読み込まれると、 コントローラ と ビュー の中でどこでも利用できます。
ヘルパは通常は、 system/helpers ディレクトリまたは、system/application/helpersに格納されています。CodeIgniter は system/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_ というプリフィックスがつけられているので、これをユーザ指定のプリフィックスとして使用してはいけないという事を覚えておいてください。
この後は、何をすればよいですか?
目次の中に、利用可能な全ヘルパファイルのリストが書いてあるのがわかると思います。それぞれを閲覧して、何をするものなのかを見てみてください。