Search

検索したいワードを入力してください

2019年03月13日

Laravelのhelper関数を自作する方法を徹底的に解説

Laravelに自作のhelper関数を追加する方法として、Composerのautoload機能を利用する方法とサービスプロバイダを登録する方法をサンプルコードとともに紹介しています。helper関数を自作して効率良く開発しましょう。

LaravelのHelper関数とは

Laravelにはhelper関数と呼ばれる便利なグローバル関数が用意されています

よく使われるhelper関数としてdd関数があります。dd関数は引数に渡された変数を表示した後、スクリプトの実行を停止する関数です。

Laravelのdd関数はSymphonyのVarDumperコンポーネントで下記のように定義されています。

/vendor/symfony/var-dumper/Resources/functions/dump.php

if (!function_exists('dd')) {
function dd(...$vars)
{
foreach ($vars as $v) {
VarDumper::dump($v);
}

die(1);
}
}


この他にもLaravelのhelper関数には配列、文字列、ファイルパス、ルートなどを扱うのに便利な関数があります。

LaravelのHelper関数を自作する方法

Laravelが用意しているhelper関数以外にプロジェクト全体で利用できるhelper関数を自作する方法をご紹介します。

まずはComposerのautoload機能を使って、自作した関数を読み込み、利用します

helpers.phpの作成

helpers.phpをappディレクトリ直下に追加して、追加したい関数を書きます

例として、ログインユーザー名を取得するgetAuthName関数を作成します。

app/helpers.php
if (! function_exists('getAuthName')) {

function getAuthName()
{
return auth()->user()->name;
}
}

大規模なアプリケーションを大勢で開発していると関数名が衝突する恐れがあるので、function_exists関数を使って、getAuthName関数が存在しなかった場合にgetAuthName関数を定義します。

autoloadの設定

LaravelではComposerのautoload機能を利用しています。

Laravelのプロジェクトのpublicディレクトリ直下のindex.phpに記述されている下記の箇所でアプリケーションを動かすために必要なファイルを読み込んでいます。

require __DIR__.'/../vendor/autoload.php';

Composerのautoload機能がファイルを自動で読み込んでくれるので、PHPファイルの冒頭にrequireやrequire_onceを記述する手間を省くことができます

新たに追加したhelpers.phpもComposerのautoload機能を使って、読み込みます。

プロジェクト直下にあるcomposer.jsonに記述されているautoloadにキーfiles、値を配列で新しく定義します。

定義した配列の中に自動で読み込んで欲しいファイルのパスを文字列で記述します。

こうすることでhelpers.phpはアプリ起動時に自動で読み込まれるので、requireをする必要がなくなります。

app/composer.json

"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
],
"files": [
"app/helpers.php"
]
},

composer.jsonを書き換えただけでは設定が反映されないので、下記Composerのコマンドを実行します。

composer dump-autoload


これで自作した関数getAuthNameをプロジェクト内で利用することができます。

自作Helperファイルを複数追加する仕組みを作る方法

自作Helperファイルを複数追加する仕組みのご紹介です。

自作のhelper関数をまとめたファイルが1つだけでは大規模なアプリケーションを開発する時、管理しづらくなり、領域や分野毎に分けたいケースが出てきます。そのような時に自動で全ての自作Helperファイルを登録する方法です。

前述ではComposerのautoload機能を利用しましたが、今回はLaravelのサービスプロバイダーを利用します。

ディレクトリ作成

appディレクトリの直下にHelpersディレクトリを作成し、Helpersディレクトリ内に自作した関数が記述されているPHPファイルを追加します。

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

artisanコマンドを実行してHelpersServiceProvider.phpを新規作成します。

php artisan make:provider HelpersServiceProvider


appディレクトリ直下のProvidersディレクトリ内にHelpersServiceProvider.phpが作成されます。

読み込み処理の記述

HelpersServiceProviderのregisterメソッドにてHelpersディレクトリ配下全てのPHPファイルをrequire_onceする処理を記述します。

class HelpersServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $file){
require_once($file);
}
}

/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}

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

サービスプロバイダーを登録するためにconfig/app.phpのprovidersの値にHelperServiceProviderクラスを追加します。

app/config/app.php

'providers' => [
 /**省略 */
 App\Providers\HelperServiceProvider::class,
 /**省略 */
],

サービスプロバイダーを登録することでアプリケーションの初期起動処理としてロードされます。

Helpersディレクトリ配下のPHPファイルがそれぞれrequire_onceされるので、自作した関数をプロジェクト内で利用することができます。

Composerのautoload機能を利用した際はファイルのパスを文字列で記述していたので、Helperファイルが追加されたり、削除される度にcomposer.jsonを修正し、composer dump-autoload コマンドを実行する必要がありました。

サービスプロバイダーを登録する方法ではループ処理でHelpersディレクトリ内にある全てのPHPファイルをrequire_onceするので、Helpersディレクトリに自作ファイルを追加、削除するだけで自作した関数を利用することができ、composer.jsonを修正する必要もcomposer dump-autoload コマンドを実行する必要もありません。

まとめ

Laravelのhelper関数の説明、helper関数を自作する方法、自作Helperファイルを複数追加する方法をご紹介しました。

Composerのautoload機能を利用する方法、Laravelのサービスプロバイダーを利用する方法がありますので、プロジェクトに合った方法を採用しましょう

別のアプリを開発していた際に独自に作成した関数などを再利用することができるので、上手に活用して、効率良く開発しましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related