Пользовательские вспомогательные классы в Laravel 5.4

У меня есть вспомогательные классы в app/Helpers. Как загрузить эти классы с помощью service provider чтобы использовать их в шаблонах кликов?

например, если у меня есть класс CustomHelper который содержит метод fooBar():

<?php

nampespace App\Helpers;

class CustomHelper
{
    static function fooBar()
    {
        return 'it works!';
    }
}

Я хочу иметь возможность сделать что-то подобное в моих шаблонах кликов:

{{ fooBar() }}

вместо этого:

{{ \App\Helpers\CustomHelper::fooBar() }}

PS: @andrew-brown ответ в Best Practices для настраиваемых помощников на Laravel 5 относится к файлам без класса. Было бы неплохо иметь решение на основе класса, чтобы вспомогательные функции могли быть организованы среди классов.

Ответы

Ответ 1

Я не думаю, что можно использовать только функцию, когда у вас есть код в ваших классах. Ну, вы можете попробовать с расширением Blade, но это слишком много.

Что вам нужно сделать, так это создать один дополнительный файл, например 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