1. Home
  2. PHP
  3. Laravel
  4. Laravel5.5で自作helper(ヘルパー)ファイルを複数追加できる仕組みを作る

Laravel5.5で自作helper(ヘルパー)ファイルを複数追加できる仕組みを作る

  • 公開日
  • カテゴリ:Laravel
  • タグ:PHP,Laravel,helper,ServiceProviders,Customize
Laravel5.5で自作helper(ヘルパー)ファイルを複数追加できる仕組みを作る

Laravel に限らず PHP フレームワークにて開発を進めていると、自作の helper(ヘルパー)関数が必要になった時に、それらをどう管理していくかというのは毎回悩ましいところでもあります。

しかもシステムが大きくなればなるほど自作ヘルパーの数も増えていき、1つのヘルパーファイルに記述しているともう完全に管理ができなくなります。

そこで今回は、機能ごとに複数のヘルパーファイルを作成しても、それを自動的に Laravel がヘルパー関数として読み込んでくれる仕組みを作りたいと思います。

尚、今回のデモンストレーションは Laravel5.5 で行いますが、5.4 や 5.3 などの 5 系でも同様の手順で行えます。

また、ルートディレクトリを「laravel/」とします。

Contents

  1. ディレクトリ作成
  2. サービスプロバイダの生成
  3. 読み込み処理の記述
  4. サービスプロパイダーを登録

ディレクトリ作成

まずは、自作のヘルパー関数を置くディレクトリを作成します。
基本的にはどこでも良いのですが、Laravel のディレクトリ構成から慣習的に app ディレクトリ配下が良いと思いますので、ここでは MyHelpers という名前のディレクトリを laravel/app/に作ります。

laravel
├── app
│   ├── Console
│   ├── Exceptions
│   ├── Http
│   ├── MyHelpers // ← ココ
│   ├── Providers

サービスプロバイダの生成

次に、この MyHelpers ディレクトリの中に配置した PHP(ヘルパー)ファイルを読み込む設定を行います。

具体的には、「サービスプロバイダ」という、Laravel の初期起動処理にこの独自ヘルパー群を読み込む処理を追加する形になります。

まずは独自ヘルパー用のサービスプロパイダを作成します。 laravel ルートディレクトリへ移動し、以下の artisan コマンドを叩きます。

# laravel ルートディレクトリへ移動
cd /path/to/laravel

# artisan コマンドでサービスプロパイダファイルを生成する
php artisan make:provider MyHelpersServiceProvider

# 実行結果
[demo@localhost laravel]# php artisan make:provider MyHelpersServiceProvider
Provider created successfully.

生成されたサービスプロパイダファイルは laravel/app/Providers に出力されています。

laravel
├─ app
│   ├─ Console
│   ├─ Exceptions
│   ├─ Http
│   ├─ MyHelpers
│   ├─ Providers
│   │    ├─ MyHelpersServiceProvider.php // ← ココ

読み込み処理の記述

それではこのファイルを開いて、自作ヘルパーを読み込む記述を行っていきます。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MyHelpersServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

↓ register メソッドに以下の記述を追加します。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MyHelpersServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
      foreach (glob(sprintf('%s/MyHelpers/*.php', app_path())) as $helper_file){
        require_once($helper_file);
      }
    }
}

説明すると、glob関数 で MyHelpers ディレクトリ内にあるすべての PHP ファイルを拾い、 それを foreach で回して読み込んでいる。という事になります。

ちなみにこれは最小の書き方を行っているので、わかりやすく分解して書くとしたらこんな感じになります。

// MyHelpersディレクトリ+正規表現で全てのPHPファイルを指定
$preg_path = sprintf('%s/MyHelpers/*.php', app_path());
// glob関数でMyHelpersディレクトリ内のすべてのPHPファイルのフルパスを取得する
$helper_files= glob($preg_path);
// ループさせてMyHelpersディレクトリ内のすべてのPHPファイルを読み込む
foreach ($helper_files as $helper_file){
  require_once($helper_file);
}

サービスプロパイダーを登録

最後に、この処理が走るように、サービスプロパイダーを登録します。
config/app.php の providers へ以下を追記します。

'providers' => [
  /*
   * Helper Original
   */
   App\Providers\MyHelperServiceProvider::class,
],

まとめ

これで全ての設定が完了しました。 あとは、MyHelpers ディレクトリに PHP ファイルを作成し、その中に自作のヘルパー関数を記述していけば、宣言なしで使う事が出来ます。 機能ごとに PHP ファイルを分けて独自ヘルパーを書いていけば、関数の数が増えても煩雑にならずスマートに管理していけるので是非試してみてください。

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級