У меня есть вспомогательные классы в 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 в разделе « Лучшие практики для настраиваемых помощников на Laravel 5» относится к файлам, не относящимся к классу. Было бы неплохо иметь решение на основе класса, чтобы вспомогательные функции могли быть организованы среди классов.
Я не думаю, что можно использовать только функцию, когда у вас есть код в ваших классах. Ну, вы можете попробовать с расширением 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