ヘルパ(関数)とは何か?
Laravelにはヘルパ関数という機能があります。通常、単に「ヘルパ」と呼ばれます。
ヘルパとは、自分で好きな名前を付けて処理を記述した関数のことで、Laravel内の好きなところで呼び出すことができます。
ヘルパ関数のメリット(必要性)
例えば、viewに渡すデータをPHPで前処理する場合に、特定のページのみで使うデータであれば対象のコントローラ内で定義すれば問題ありません。わざわざヘルパとして登録するまでもありません。
ですが、処理を他の場所でも使い回す場合は、ヘルパが登録してあれば関数名を指定するだけでその処理を実行することができるようになります。
なお、自作のヘルパを登録するのは比較的簡単です。
ヘルパを作成する手順
ヘルパの作成は以下の4つのステップを踏みます。
ヘルパ関数を記述するファイルを作成する
まずは、ヘルパ関数を記述するファイルを作成します。
ファイルを作成する場所はどこでもいいです。app直下にhelpers.phpといったファイルを作成するのが一般的です。
それ以外にもhelperといったディレクトリを作成し、その中に処理内容ごとにファイルを作成して保存する方法などもあります。
関数を定義する
続いて、関数名をつけて、処理内容を記述します。
そのときのポイントは一行目にif (! function_exists('関数名'))
を記載することです。
これは、すでに関数が存在しないかを確認するもので、デフォルトで用意されているメソッドなどの上書きを防ぐ目的です。
<?php
if (! function_exists('関数名')) {
/**
* 関数の説明文
*
* @param string $xxx
*/
function 関数名(引数)
{
処理
}
}
・function_exists ( string $function_name )
組み込み関数に引数で指定した関数が存在すればtreuを返します。
!
をつけることで、デフォルトの関数と被らない場合のみ関数を作成できるようにしています。
composerのautoloadに追記する
作成したヘルパをLaravelで読み込むために、ルートディレクトリにあるcomposer.json
のautoload
に作成したヘルパファイルのパスを記述します。
"autoload": {
"files": [
"app/helpers.php"
],
}
autoloadの更新
composer.jsonのautloadを編集しただけでは変更内容は反映されません。
プロジェクトに変更内容を反映するために以下のコマンドを実行します。
$ composer dump-autoload
これでLaravelのどこからでも呼び出せるようになります。
実例
ここではヘルパの例として、ヘルパ名「greeting」を作成して、実際に呼び出す例を紹介します。
ファイルの作成
appディレクトリ直下に作成する場合は以下のようにします。
app > helpers.php
関数を定義する
<?php
if (! function_exists('greeting')) {
/**
* @param string $name
* @return string
*/
function greeting(string $name)
{
return "hello ".$name."!!!";
}
}
greetingという関数で引数に名前を渡すと、「hello 名前!!!」という文字列を返します。
autoloadをリロードする
composer.jsonの変更内容を反映させるため、autoloadをリロードします。
$ composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 4624 classes
コントローラの中でヘルパを実行し、結果をビューに渡す
ビューファイル helper.blade.phpの中で、作成したgreeting関数の実行結果を表示する処理を作成します。
helperというパスにアクセスしたときに、HelperControllerのindexアクションを実行して、その中でgreetingを実行する処理を記述しておきます。
処理結果を、helper.blade.phpに渡します。
ルーティング
Route::get('helper', 'HelperController@index');
コントローラ
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelperController extends Controller
{
public function index(){
$name = greeting("xxx");
return view('helper', ['hello'=>$name]);
}
}
ビュー(ブレード)
<div>{{ $hello }}</div>
ブラウザの表示
URL「ドメイン/helper」にアクセスすると以下のように表示されます。
作成した関数が正しく実行され、結果がビューに渡されていることがわかります。
tinker(対話モード)でチェック
作成したヘルパはLaravelの対話モードである「tinker」を使って確認することもできます。
thikerは以下のコマンドで起動します。
$ php artisan tinker
実例
$ php artisan tinker
Psy Shell v0.10.6 (PHP 7.3.11 — cli) by Justin Hileman
>>> greeting('XXX')
=> "hello XXX!!!"
作成したヘルパが実行されていることがわかります。