web-dev-qa-db-ja.com

laravel 5でグローバルヘルパー関数を作成するにはどうすればよいですか?

いくつかのcurrentUser()関数を作成したい場合、oauth=ビューまたはコントローラーで使用できる場所で行っています(Railsを考えて、_helper_method: current_user_アプリケーションコントローラ内)。

ヘルパーフォルダーを作成し、そこに関数を追加するように私が読んだすべての状態は、その後、あなたはそれを行うことができます_Helpers::functionName_これはこれを行う正しい方法ですか?

ブレードテンプレートとコントローラーで使用できるヘルパー関数を作成する「laravelの方法」とは何ですか?

32
TheWebs

App/HelpersディレクトリにAnythingHelper.phpという名前の新しいファイルを作成します。私のヘルパーの例は次のとおりです。

<?php
function getDomesticCities()
{
$result = \App\Package::where('type', '=', 'domestic')
    ->groupBy('from_city')
    ->get(['from_city']);

return $result;
}

次のコマンドでヘルパーのサービスプロバイダーを生成します

php artisan make:provider HelperServiceProvider

新しく生成されたHelperServiceProvider.phpの登録関数に次のコードを追加します

require_once app_path('Helpers/AnythingHelper.php');

config/app.phpにこのサービスプロバイダーをロードすると完了です。

'App\Providers\HelperServiceProvider',
68
Khan Shahrukh

グローバル関数ファイルを作成する簡単で効率的な方法は、Composerから直接自動ロードすることです。 composer=のautoloadセクションは、自動的にロードされるfiles配列を受け入れます。

  1. 好きな場所に_functions.php_ファイルを作成します。この例では、_app/Helpers_の中に作成します。

  2. 関数を追加しますが、notを実行しますクラスまたは名前空間を追加します。

    _<?php
    
    function global_function_example($str)
    {
       return 'A Global Function with '. $str;
    }
    _
  3. autoloadセクション内の_composer.json_に次の行を追加します。

    _"files": ["app/Helpers/functions.php"]
    _

    Laravel 5の例:

    _"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": ["app/Helpers/functions.php"] // <-- Add this line
    },
    _
  4. _composer dump-autoload_を実行します

できた!これで、ブレードビューを含むアプリケーションの任意の部分からglobal_function_example('hello world')にアクセスできます。

41
Arian Acosta

Laravelグローバルヘルパー

多くの場合、アプリケーション全体でグローバルにアクセスするユーティリティ機能を必要とする自分を見つけるでしょう。 laravel=から借用すると、カスタム関数で機能を拡張できるデフォルトのヘルパーが作成されます。

ヘルパーを作成しますファイル、クラスではありません

名前空間に煩わされたくないので、クラスではなくファイルが好きです。クラスの接頭辞なしでその関数にアクセスできるようにしたいので、greeting('Brian');ではなくHelper::greeting('Brian'); Laravelはヘルパーを使用します。

ファイル: _app/Support/helper.php_

Composerでヘルパーファイルを登録します:_composer.json_

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

最初のヘルパー関数を作成します

_<?php

if (!function_exists('greet')) {
    /**
     * Greeting a person
     *
     * @param  string $person Name
     * @return string
     */
    function greet($person)
    {
        return 'Hello ' . $person;
    }
}
_

使用法:

その関数にアクセスする前に、ファイルを自動ロードすることを忘れないでください:_composer dump-autoload_

Tinkerでテストしましょう

_$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ΓÇö cli) by Justin Hileman
>>> greet('Brian');
=> "Hello Brian"
>>> exit
Exit:  Goodbye.
_

ブレード

_<p>{{ greet('Brian') }}</p>
_

Bladeディレクティブとしての高度な使用法:

単純な関数の代わりにブレードディレクティブを使用したい場合があります。 AppServiceProviderの起動メソッドにBladeディレクティブを登録します:_app/Providers/AppServiceProvider.php_

_public function boot()
{
    // ...
    Blade::directive('greet', function ($expression) {
        return "<?php echo greet({$expression}); ?>";
    });
}
_

使用法:<p>@greet('Brian')</p>

注:キャッシュビューをクリアする必要があるかもしれません_php artisan view:clear_

12
bmatovu