【Laravel】美しいへルパ関数の作り方


この記事に書いてあること

Laravelアプリケーションでヘルパー関数を作成する方法について書いています。

なぜ書いたか?

自作のへルパ関数を追加したいと思って、やり方を調べたら以下のようにcomposer.jsonファイルにヘルパー関数を追加する方法が多く紹介されていました。

composer.json
"autoload": {
    "files": [
        "app/helpers.php"
    ],
}

たしかにこの方法でも追加はできるのですが、へルパ関数を何個も実装したい時にいちいちjsonファイルを追記する可能性が出てきたり、composer dump-autoloadをする必要が出てきたりと面倒くさいなぁと思いました。

あと単純になんか綺麗じゃないなと。

そこで以下の記事を参考にさせていただき、サービスプロバイダとしてへルパ関数を実装することにしました。

美しいへルパ関数の作り方

サービスプロバイダを作成する

artisanコマンドを実行してHelperServiceProviderを作成します。

php artisan make:provider HelperServiceProvider

実行後は、app\ProvidersフォルダにHelperServiceProvider.phpが作成されます。

サービスプロバイダのregisterメソッドを編集

HelperServiceProvider.phpの、register()メソッドに以下のコードを記述します。

app\Providers\HelperServiceProvider.php
public function register()
{
    $allHelperFiles = glob(app_path('Helpers').'/*.php');
    foreach ($allHelperFiles as $key => $helperFile) {
        require_once $helperFile;
    }
}

上記のPHPコードではapp\Helpersフォルダに存在するPHPファイルすべてをインクルードしています。
app\Helpersフォルダ配下のPHPファイルに追加された関数は、コントローラ、モデル、ビューなどの任意の場所で使用することができるようになります。

サービスプロバイダを登録する

今作ったサービスプロバイダを登録していきます。
config\app.phpを以下のように追記します。

config\app.php
/*
* Application Service Providers...
*/
App\Providers\HelperServiceProvider::class, //追記
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,

appHelpersディレクトリを作成する

へルパ関数を記述するためのディレクトリを作成します。
このディレクトリ内にへルパ関数を記述したPHPファイルを追加していきます。

app
└ Helpers/ 
     └ ◯◯◯.php
     └  ◯◯◯.php
     └ ◯◯◯.php

ヘルパ関数の処理を記述したPHPファイルを作成する

今回は、挨拶を返す簡単な関数をapp\Helpersディレクトリ内にsay_Hello.phpという名前で新規作成しました。
このファイルには、名前空間を追加する必要はありません。
また、重要な点としてこの関数が先に宣言されているかどうかを確認するためにfunction_existsメソッドを忘れないようにします。

app\Helpers\say_Hello.php
<?php
if (! function_exists('say_Hello')) {
    function say_Hello($yourName)
    {
        return 'Hello'.$yourName;
    }
}

Laravel用の新しいHelperファイルの設定は以上です。
よきLaravelライフを!