ヘルパー関数
ヘルパーとは?
名前が示すように、ヘルパーはタスクを支援します。各ヘルパーファイルは、特定のカテゴリの関数の集合です。リンクの作成を支援する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()
関数は、定義されたすべてのネームスペースをスキャンし、同じ名前のすべてのヘルパーを読み込みます。これにより、モジュールのヘルパーと、このアプリケーション用に作成したヘルパーの両方をロードできます。
読み込み順序は次のとおりです。
app/Helpers - ここに読み込まれたファイルは常に最初に読み込まれます。
{namespace}/Helpers - すべてのネームスペースは、定義された順にループ処理されます。
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
は指定しないでください。
ロード順 を参照して、ヘルパーファイルのロード順を確認してください。
次は何?
目次には、利用可能なすべての ヘルパー のリストがあります。それぞれを参照して、機能を確認してください。