Как автоматически зарегистрировать класс помощников в ServiceProvider?

Я работаю над проектом Laravel 5.1 и разработал много помощников.

Есть ли способ автоматически зарегистрировать класс помощников в ServiceProivder вместо того, чтобы добавлять их вручную?


person maytham-ɯɐɥʇʎɐɯ    schedule 28.07.2015    source источник


Ответы (1)


Я работал над этим и, наконец, исправил его, собрав вместе разные головоломки, заканчивающиеся этим решением:

Для Laravel 5:

Шаг 1. Создана папка app/Helpers

Шаг 2. В папке app/Providers создайте провайдера HelpersServiceProvider.php, используя следующую команду мастера:

php artisan make:provider HelpersServiceProvider

Шаг 3. В файле HelpersServiceProvider.php мы создаем функцию внутреннего регистра foreach loop для получения всех вспомогательных классов следующим образом:

public function register()
{
    foreach (glob(app_path() . '/Helpers/*.php') as $helpersfilename)
    {
        require_once($helpersfilename);
    }
}

Шаг 4. В config/app.php добавлена ​​следующая строка

/*
* Application Service Providers added by developer...
*/
App\Providers\HelpersServiceProvider::class,

Вот и все, решение здесь протестировано и работает на всех версиях Laravel 5.x. Теперь вы можете добавлять неограниченное количество хелперов в папку helpers, они будут автоматически добавлены в систему.

Laravel 4 еще не тестировался, но если кто-то сделает это, добавьте/отредактируйте это для Laravel 4.

person maytham-ɯɐɥʇʎɐɯ    schedule 28.07.2015
comment
Очень хорошее решение. Однако в моем случае я добавляю помощников непосредственно в autoload внутри composer.json. Вот как это у меня: "files": [ "app/Helpers/xyz.php"] Я нашел, что это проще, так как у меня будет только 1 или 2 вспомогательных файла в моем приложении. Но я обязательно воспользуюсь вашим методом, если у меня будет много вспомогательных файлов. - person Neel; 09.08.2015
comment
Я полностью согласен, когда-то такой метод помогал в работе автоматически, вместо того, чтобы забывать даже с таким небольшим количеством файлов, но опять же. - person maytham-ɯɐɥʇʎɐɯ; 09.08.2015
comment
правда.. хороший момент. Ваш метод — одноразовая работа, и все будущие помощники будут включены автоматически. Мне это нравится. - person Neel; 09.08.2015
comment
Мне нравится этот подход. Но в документах указано, что within the register method, you should only bind things into the service container. You should never attempt to register any event listeners, routes, or any other piece of functionality within the register method. Итак, мне интересно, считается ли этот подход «привязкой чего-либо к контейнеру службы» или он противоречит тому, что указано в документах? Я просто пытаюсь лучше понять ситуацию, чтобы принять решение, но опять же, мне нравится такой подход! - person cbcaio; 08.12.2015
comment
@cbcaio я не знаю об этом, я расследую это и вернусь с ответом, если вам все еще нужно это уточнить - person maytham-ɯɐɥʇʎɐɯ; 23.12.2015
comment
но если вы хотите использовать Helper::function в контроллере, вам нужно использовать код Helper;. Как этого избежать? - person Ángel Carlos del Pozo Muela; 18.01.2018