【Laravel】ヘルパ関数とは何か?作り方と使い方を実例で解説|ファイルの設置場所やコントローラやthikerでの呼び出し・確認方法

laravel-prograshi(プロぐらし) Laravel
記事内に広告が含まれていることがあります。
[PR]

ヘルパ(関数)とは何か?

Laravelにはヘルパ関数という機能があります。通常、単に「ヘルパ」と呼ばれます。

ヘルパとは、自分で好きな名前を付けて処理を記述した関数のことで、Laravel内の好きなところで呼び出すことができます。


ヘルパ関数のメリット(必要性)

例えば、viewに渡すデータをPHPで前処理する場合に、特定のページのみで使うデータであれば対象のコントローラ内で定義すれば問題ありません。わざわざヘルパとして登録するまでもありません。

ですが、処理を他の場所でも使い回す場合は、ヘルパが登録してあれば関数名を指定するだけでその処理を実行することができるようになります。

point

ヘルパを作成すると処理を使い回すことができる。

なお、自作のヘルパを登録するのは比較的簡単です。


ヘルパを作成する手順

ヘルパの作成は以下の4つのステップを踏みます。

ヘルパを作成する手順
  1. ヘルパ関数を記述するファイルを作成する。
  2. 関数を定義する。
  3. composerのautoloadに追記する。
  4. autoloadの更新。


ヘルパ関数を記述するファイルを作成する

まずは、ヘルパ関数を記述するファイルを作成します。

ファイルを作成する場所はどこでもいいです。app直下にhelpers.phpといったファイルを作成するのが一般的です。

それ以外にもhelperといったディレクトリを作成し、その中に処理内容ごとにファイルを作成して保存する方法などもあります。

point

ヘルパを記述するファイルの作成場所に指定はありません。(composerでファイルパスを指定して読み込むため)


関数を定義する

続いて、関数名をつけて、処理内容を記述します。

そのときのポイントは一行目にif (! function_exists('関数名')) を記載することです。

これは、すでに関数が存在しないかを確認するもので、デフォルトで用意されているメソッドなどの上書きを防ぐ目的です。

<?php

if (! function_exists('関数名')) {
    /**
     * 関数の説明文
     *
     * @param  string  $xxx
     */
    function 関数名(引数)
    {
        処理
    }
}

function_exists ( string $function_name )
組み込み関数に引数で指定した関数が存在すればtreuを返します。

!をつけることで、デフォルトの関数と被らない場合のみ関数を作成できるようにしています。


composerのautoloadに追記する

作成したヘルパをLaravelで読み込むために、ルートディレクトリにあるcomposer.jsonautoloadに作成したヘルパファイルのパスを記述します。

    "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!!!"

作成したヘルパが実行されていることがわかります。



タイトルとURLをコピーしました