ヘルパー関数

ヘルパーとは?

名前が示すように、ヘルパーはタスクを支援します。各ヘルパーファイルは、特定のカテゴリの関数の集合です。リンクの作成を支援するURLヘルパー、フォーム要素の作成を支援するフォームヘルパー、さまざまなテキスト書式設定ルーチンを実行するテキストヘルパー、Cookieの設定と読み取りを行うCookieヘルパー、ファイルの処理を支援するファイルシステムヘルパーなどがあります。

CodeIgniterの他のほとんどのシステムとは異なり、ヘルパーはオブジェクト指向形式で記述されていません。これらはシンプルで手続き型の関数です。各ヘルパー関数は、他の関数に依存することなく、1つの特定のタスクを実行します。

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

ヘルパーは通常、**system/Helpers**または**app/Helpers**ディレクトリに格納されます。

ヘルパーの読み込み

注記

URLヘルパーは常に読み込まれるため、自分で読み込む必要はありません。

ヘルパーの読み込み

ヘルパーファイルの読み込みは、次の方法を使用すると非常に簡単です。

<?php

helper('name');

上記のコードは**name_helper.php**ファイルを読み込みます。

重要

CodeIgniterのヘルパーファイル名はすべて小文字です。したがって、Linuxなどの大文字と小文字を区別するファイルシステムでは、helper('Name')は機能しません。

たとえば、**cookie_helper.php**という名前のCookieヘルパーファイルを読み込むには、次のようにします。

<?php

helper('cookie');

注記

helper()関数は値を返さないため、変数に代入しようとしないでください。表示されているように使用してください。

自動検出とComposerパッケージ

デフォルトでは、CodeIgniterは自動検出によって定義されたすべてのネームスペースでヘルパーファイルを探します。定義されたネームスペースは、sparkコマンドで確認できます。ネームスペースの確認を参照してください。

多くのComposerパッケージを使用する場合は、多くの定義済みネームスペースがあります。CodeIgniterはデフォルトですべてのネームスペースをスキャンします。

関連のないComposerパッケージのスキャンに時間を無駄にしないように、自動検出のパッケージを手動で指定できます。詳細についてはComposerパッケージの指定を参照してください。

または、ネームスペースを指定して、読み込みたいヘルパーを指定することもできます。

読み込み順序

helper()関数は、定義されたすべてのネームスペースをスキャンし、同じ名前のすべてのヘルパーを読み込みます。これにより、モジュールのヘルパーと、このアプリケーション用に作成したヘルパーの両方をロードできます。

読み込み順序は次のとおりです。

  1. app/Helpers - ここに読み込まれたファイルは常に最初に読み込まれます。

  2. {namespace}/Helpers - すべてのネームスペースは、定義された順にループ処理されます。

  3. system/Helpers - 基本ファイルは最後に読み込まれます。

複数のヘルパーの読み込み

一度に複数のヘルパーを読み込む必要がある場合は、ファイル名の配列を渡すと、すべてが読み込まれます。

<?php

helper(['cookie', 'date']);

コントローラーでの読み込み

ヘルパーは、コントローラーメソッド内のどこでも(ビューファイル内でも可能ですが、これは良い方法ではありません)、使用する前に読み込む限り読み込むことができます。

コントローラーコンストラクターでヘルパーを読み込んで、どのメソッドでも自動的に使用できるようにすることも、必要な特定のメソッドでヘルパーを読み込むこともできます。

ただし、コントローラーコンストラクターで読み込む場合は、代わりにコントローラーの$helpersプロパティを使用できます。コントローラーを参照してください。

特定のネームスペースからの読み込み

デフォルトでは、CodeIgniterは定義されたすべてのネームスペースでヘルパーファイルを探し、見つかったすべてのファイルを読み込みます。

特定のネームスペースのヘルパーのみを読み込む場合は、そのヘルパーの名前の前に、そのヘルパーが存在するネームスペースをプレフィックスとして付けます。そのネームスペースディレクトリ内では、ローダーは**Helpers**という名前のサブディレクトリにあることを期待します。例を挙げると理解しやすくなります。

この例では、すべてのブログ関連のコードを独自のネームスペースExample\Blogにグループ化していると仮定します。ファイルはサーバーの**Modules/Blog/**にあります。そのため、ブログモジュールのヘルパーファイルは**Modules/Blog/Helpers/**に配置します。**blog_helper**ファイルは**Modules/Blog/Helpers/blog_helper.php**にあります。コントローラー内では、ヘルパーを読み込むために次のコマンドを使用できます。

<?php

helper('Example\Blog\blog');

次の方法も使用できます。

<?php

helper('Example\Blog\Helpers\blog');

注記

このようにして読み込まれたファイル内の関数は、真にネームスペース化されていません。ネームスペースは、ファイルを見つけるための便利な方法として使用されるだけです。

ヘルパーの自動読み込み

バージョン4.3.0の新機能。

特定のヘルパーをアプリケーション全体でグローバルに必要とする場合は、システムの初期化時にCodeIgniterに自動読み込みするように指示できます。これを行うには、**app/Config/Autoload.php**ファイルを開き、$helpersプロパティにヘルパーを追加します。

ヘルパーの使用

使用する関数が含まれているヘルパーファイルを読み込んだら、標準のPHP関数のように呼び出します。

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

<div>
<?= anchor('blog/comments', 'Click Here') ?>
</div>

ここでClick Hereはリンクの名前、blog/commentsはリンク先のコントローラー/メソッドへのURIです。

ヘルパーの作成

カスタムヘルパーの作成

ヘルパーファイル名は、**ヘルパー名**と**_helper.php**です。

たとえば、infoヘルパーを作成するには、**app/Helpers/info_helper.php**という名前のファイルを作成し、関数を追加します。

<?php

// app/Helpers/info_helper.php
use CodeIgniter\CodeIgniter;

/**
 * Returns CodeIgniter's version.
 */
function ci_version(): string
{
    return CodeIgniter::CI_VERSION;
}

ヘルパーファイルには、好きなだけ多くの関数を追加できます。

“ヘルパーの拡張”

ヘルパーを“拡張”するには、既存のヘルパーと同じ名前のファイルを **app/Helpers** フォルダーに作成します。

既存のヘルパーに機能を追加するだけの場合(関数を1つまたは2つ追加する、特定のヘルパー関数の動作を変更するなど)、ヘルパー全体を独自バージョンで置き換えるのはオーバースペックです。このような場合は、ヘルパーを単に“拡張”する方が良いでしょう。

注記

「拡張」という用語は、ヘルパー関数はプロシージャルで個別であり、従来のプログラミングの意味で拡張できないため、緩やかな表現です。内部的には、これにより、ヘルパーが提供する関数を追加または置き換えることができます。

たとえば、ネイティブの **Array Helper** を拡張するには、**app/Helpers/array_helper.php** という名前のファイルを作成し、関数を追加または上書きします。

<?php

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
    $needle = is_array($needle) ? $needle : [$needle];

    foreach ($needle as $item) {
        if (in_array($item, $haystack, true)) {
            return true;
        }
    }

    return false;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
    shuffle($array);

    return array_pop($array);
}

重要

名前空間 App\Helpers は指定しないでください。

ロード順 を参照して、ヘルパーファイルのロード順を確認してください。

次は何?

目次には、利用可能なすべての ヘルパー のリストがあります。それぞれを参照して、機能を確認してください。