danjo0193
@danjo0193

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravel10にて自作ヘルパ関数が動作しません。

解決したいこと

PHP 8.2.8 / Laravel10でWebアプリケーションの習作を作っています。
プロジェクトのどこからでも呼び出せるヘルパ関数を定義したいです。
よくある解説を見て実装しましたが、コントローラやviewから関数が見えていないようです。

発生している問題・エラー

Call to undefined function custom_function()

該当するソースコード

composer.jsonのautoloadの項目

    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/Helpers/CustomHelpers.php"
        ]
    },

app/Helpers/CustomHelpers.php

<?php
if (!function_exists('custom_function')) {
    function custom_function() {
        // ヘルパー関数の処理
        return 'ヘルパー関数custom_function()を実行しました';
    }
}

自分で試したこと

上記を反映した上で、プロジェクトのルートディレクトリで

composer dump-autoload

を実行。結果は以下のように、問題は見当たりません。

/var/www/laravelapp# composer dumpautoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
   INFO  Discovering packages.
  laravel/sail .................................................................................................. DONE
  laravel/sanctum ............................................................................................... DONE
  laravel/tinker ................................................................................................ DONE
  nesbot/carbon ................................................................................................. DONE
  nunomaduro/collision .......................................................................................... DONE
  nunomaduro/termwind ........................................................................................... DONE
  spatie/laravel-ignition ....................................................................................... DONE
Generated optimized autoload files containing 5907 classes

しかしコントローラやview、あるいはphp tinkerコマンドからcustom_function()を呼び出すと、上記例外が発生します。

何か私が他に見落としているのか、それともLaravel10というあまり情報がない新しいバージョンを使っているからなのか。何か分かる方、ご教示お願い致します。

1

1Answer

以下は、あなたがファイルapp/Helpers/CustomHelpers.phpで補助関数custom_function()を定義したことです。これは良いスタートです。ただし、この関数があなたのLaravelアプリケーションと互換性のある名前空間構造内で正しく定義されていることを確認することが重要です。

namespace App\Helpers;

if (!function_exists(__NAMESPACE__ . '\custom_function')) {

    // 存在しない場合、テスト名前空間内で例の関数を定義します。
    function example()
    {
        // 例の関数のコード。
    }
}

__NAMESPACE__の使用は、現在の名前空間の名前を返すマジック定数です。

直接補助関数を呼び出す場合は、グローバル関数として定義する必要があることをお忘れなく。クラスベースのアプローチを使用する場合は、補助関数を静的クラス内に定義し、静的メソッドとして呼び出す必要があります。

補助関数クラスの例:

namespace App\Helpers;

class CustomHelpers {
    public static function custom_function() {
        // ここにあなたのロジックを記述してください。
    }
}

その後、次のように補助関数を呼び出すことができます:

use App\Helpers\CustomHelpers;

$result = CustomHelpers::custom_function();

これが何らかのお手伝いになることを願っています。日本語に不正確な解釈があった場合、申し訳ありません。

1Like

Your answer might help someone💌