_app/Helpers
_にいくつかのヘルパークラスがあります。 _service provider
_を使用してこれらのクラスをロードし、ブレードテンプレートで使用するにはどうすればよいですか?
例えばメソッドfooBar()
を含むクラスCustomHelper
がある場合:
_<?php
nampespace App\Helpers;
class CustomHelper
{
static function fooBar()
{
return 'it works!';
}
}
_
ブレードテンプレートで次のようなことができるようにしたいと思います。
_{{ fooBar() }}
_
これを行う代わりに:
_{{ \App\Helpers\CustomHelper::fooBar() }}
_
PS:@ andrew-brownの answer in Laravelのカスタムヘルパーのベストプラクティス5 非クラスファイルを扱います。クラス間でヘルパー関数を整理できるように、クラスベースのソリューションを用意するのは良いことです。
クラスにコードがある場合、関数のみを使用することは不可能だと思います。まあ、あなたはブレードを拡張することで試すことができますが、それは多すぎます。
あなたがすべきことは、たとえばapp\Helpers\helpers.php
およびcomposer.jsonファイルに次のように入力します。
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": ["app/Helpers/helpers.php"] // <- this line was added
},
作成app/Helpers/helpers.php
ファイルして実行
composer dump-autoload
app/Helpers/helpers.php
ファイルでは、次のようなカスタム関数を追加できます。
if (! function_exists('fooBar')) {
function fooBar()
{
return \App\Helpers\CustomHelper::fooBar();
}
}
そのため、グローバル関数を定義しますが、実際にはそれらのすべてがいくつかのクラスの特定のパブリックメソッドを使用する場合があります。
ちなみに、これはLaravelが独自のヘルパーに対して行うこととまったく同じです:
if (! function_exists('array_add')) {
function array_add($array, $key, $value)
{
return Arr::add($array, $key, $value);
}
}
ご覧の通りarray_add
は、より短い(またはより冗長な)書き込み方法ですArr::add