ヘルパー関数

ヘルパーは、名前が示すように、作業に役立ちます。各ヘルパーファイルは、 単に特定カテゴリの関数の集まりです。 URL ヘルパー はリンクを作成するのに役立ちます。 フォームヘルパーはフォーム要素を作成するのに役立ちます。 テキストヘルパー はさまざまなテキストの書式ルーチンを実行します。 クッキーヘルパー はクッキーを読み書きします。 ファイルヘルパーはファイル操作に役立ちます。など。

CodeIgniter の他のほとんどの仕組みとは異なり、 ヘルパーはオブジェクト指向の形式で書かれていません。 これらは単純な手続き型関数です。 各ヘルパー関数は、他の機能に依存することなく、ある特定の作業を実行します。

CodeIgniter はデフォルトではヘルパーファイルをロードしないので、 ヘルパー使用の最初のステップはそれをロードすることです。一度読み込まれると、 それは コントローラビュー でグローバルに利用できるようになります。

ヘルパーはたいてい system/helpers 、または application/helpers ディレクトリ にあります。CodeIgniter は最初に ** application/helpers ディレクトリ** を検索します。 ディレクトリが存在しないか指定したヘルパーが配置されていない場合、 CI は代わりにグローバルな system/helpers/ ディレクトリを探します。

ヘルパーのロード

ヘルパーファイルのロードはつぎの方法を使用すると非常に簡単です:

$this->load->helper('name');

name の箇所はヘルパーのファイル名で、 .php のファイル拡張子も 「 helper 」の名前もありません。

たとえば、 url_helper.php という名前の URL ヘルパー ファイルをロードするには、 この操作を行います:

$this->load->helper('url');

使用する前にロードすれば、ヘルパーはコントローラのメソッド内の任意の場所でロードされた状態になっています (ビューファイル内でもロードされた状態です。良い習慣ではありませんが) 。 ヘルパーはコントローラのコンストラクタでもすることができ、 それらは自動的にどこでも利用可能になることになります。 または、あなたがそれを必要とする特定の関数内でヘルパーをロードすることも できます。

注釈

上記のヘルパーのロードメソッドは値を返さないので、変数に代入しようとしないでください。 例示したように、使用するだけにしてください。

複数のヘルパーのロード

2 つ以上のヘルパーをロードする必要がある場合、配列で指定することができます。 次のように:

$this->load->helper(
        array('helper1', 'helper2', 'helper3')
);

ヘルパーのオートローディング

アプリケーション全体でグローバルに特定のヘルパーが必要となった場合、 システムの初期化時に自動的にロードするように CodeIgniter に設定することができます。 application/config/autoload.php ファイルを開き、 オートロード配列にヘルパーを追加するだけでおわります。

ヘルパーの使いかた

使いたい関数を含むヘルパーファイルを一度ロードすれば、 標準の PHP 関数のような方法でそれを呼び出せます。

たとえば、ビューファイルのいずれかで anchor() 関数を使用してリンクを作成するには、 次のようにします:

<?php echo anchor('blog/comments', 'Click Here');?>

「 Click Here 」の箇所はリンクの名前で、「 blog/comments 」は リンクしたいコントローラ/メソッドの URI です。

ヘルパーを「継承」する

ヘルパーを「継承」するには、 application/helpers/ フォルダ内にファイルを作成しますが、 既存のヘルパーと同じ名前に加えて MY_ プレフィックスをつけます (この項目は設定変更可能です。後述参照) 。

やりたいことがいくらかの機能を既存のヘルパーに加えたいだけ―― ひょっとすると関数をひとつふたつ追加したり、 特定のヘルパーの動作を変えたいとか――の場合、ヘルパー全体をあなたのバージョンに置き換えるのはやりすぎです。 この場合、シンプルにヘルパーを「継承」するのが良いでしょう。

注釈

ここでの用語「継承」はテキトーな使いかたをしています。 ヘルパー関数は手続き的かつ固まってもなく、 伝統的なプログラムの意味において継承することはできません。 ヘルパーが提供する機能を追加、交換する方法をどうやっているか、詳しく解剖してみてください。

たとえば、標準の 配列ヘルパー を継承するためには、 application/helpers/MY_array_helper.php という名前のファイルを作成し、 機能を追加または上書きします:

// any_in_array() は配列ヘルパーにはありません、なのでこれは新しい関数を定義します
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() は配列ヘルパーに含まれます、なのでこれは標準関数をオーバーライドします
function random_element($array)
{
        shuffle($array);
        return array_pop($array);
}

独自のプレフィックスを設定する

「継承」するヘルパーのファイル名のプレフィックスは、 ライブラリやコアクラスを継承するために使用されるものと同じです。独自のプレフィックスを設定するには application/config/config.php ファイルを開いて、次の項目を探してください:

$config['subclass_prefix'] = 'MY_';

すべての標準の CodeIgniter のライブラリはプレフィックスに CI_ がついていますので、 これは 使 わ な い よ う ご注意ください。

それで?

利用可能なすべてのヘルパーファイルのリストが目次に書いてあります。 それらが何をするかはひとつひとつ見ていってください。