Лучшие практики для индивидуальных помощников на Laravel 5

Я хотел бы создать некоторые помощники (функции), чтобы избежать повторения кода между некоторыми видами в стиле L5:

view.blade.php

<p>Foo Formated text: {{ fooFormatText($text) }}</p> 

Это в основном функции форматирования текста. Где и как я могу поместить файл с этими функциями?

Создайте файл helpers.php в папке вашего приложения и загрузите его композитором:

 "autoload": { "classmap": [ ... ], "psr-4": { "App\\": "app/" }, "files": [ "app/helpers.php" // <---- ADD THIS ] }, 

После добавления в файл composer.json выполните следующую команду:

 composer dump-autoload 

моя первоначальная мысль тоже была автозагрузкой композитора, но мне это не очень понравилось Laravel 5ish. L5 активно использует сервис-провайдеров, это то, что загружает ваше приложение.

Для начала я создал папку в моем каталоге app под названием Helpers . Затем в папке « Helpers » я добавил файлы для функций, которые я хотел добавить. Наличие папки с несколькими файлами позволяет избежать того, что один большой файл становится слишком длинным и неуправляемым.

Затем я создал HelperServiceProvider.php , выполнив команду artisan:

 artisan make:provider HelperServiceProvider 

В методе register я добавил этот фрагмент

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

наконец, зарегистрируйте поставщика услуг в вашем config/app.php в массиве поставщиков

 'providers' => [ 'App\Providers\HelperServiceProvider', ] 

теперь загружается любой файл в вашем справочном каталоге и готов к использованию.

ОБНОВЛЕНИЕ 2016-02-22

Здесь есть много хороших вариантов, но если мой ответ работает на вас, я пошел вперед и сделал пакет для включения помощников таким образом. Вы можете использовать пакет для вдохновения или не стесняйтесь загружать его вместе с Composer. В нем есть встроенные помощники, которые я часто использую (но все они неактивны по умолчанию) и позволяет создавать собственные пользовательские помощники с простым генератором Artisan. Он также учитывает предположение, что один ответчик имел использование mapper и позволяет вам явно определять пользовательские помощники для загрузки или по умолчанию автоматически загружать все PHP-файлы в ваш справочный каталог. Обратная связь и PR очень ценятся!

 composer require browner12/helpers 

Github: browner12 / helpers

Пользовательские классы в Laravel 5, легкий путь

Этот ответ применим к общим пользовательским классам в Laravel. Более подробный ответ на Blade см. В разделе Инструкции для пользовательских кликов в Laravel 5 .

Шаг 1. Создайте свой файл справки (или другого пользовательского класса) и дайте ему подходящее пространство имен. Напишите свой класс и метод:

 <?php // Code within app\Helpers\Helper.php namespace App\Helpers; class Helper { public static function shout(string $string) { return strtoupper($string); } } 

Шаг 2. Создайте псевдоним:

 <?php // Code within config/app.php 'aliases' => [ ... 'Helper' => App\Helpers\Helper::class, ... 

Шаг 3: используйте его в шаблоне Blade:

 <!-- Code within resources/views/template.blade.php --> {!! Helper::shout('this is how to use autoloading correctly!!') !!} 

Дополнительный кредит: используйте этот класс в любом месте вашего приложения Laravel:

 <?php // Code within app/Http/Controllers/SomeController.php namespace App\Http\Controllers; use Helper; class SomeController extends Controller { public function __construct() { Helper::shout('now i\'m using my helper class in a controller!!'); } ... 

Источник: http://www.php-fig.org/psr/psr-4/

Почему это работает: https://github.com/laravel/framework/blob/master/src/Illuminate/Support/ClassLoader.php

Где автозагрузка происходит от: http://php.net/manual/en/language.oop5.autoload.php

Это то, что предлагает JeffreyWay в этой дискуссии Laracasts .

  1. В каталоге app/Http создайте файл helpers.php и добавьте свои функции.
  2. В составе composer.json в блоке autoload добавьте "files": ["app/Http/helpers.php"] .
  3. Запустите composer dump-autoload .

Просеяв множество ответов на SO и Google, я все еще не мог найти оптимальный подход. В большинстве ответов мы оставляем приложение и полагаемся на сторонний инструмент Composer для выполнения этой работы, но я не уверен, что соединение с инструментом просто для включения файла является разумным.

Ответ Эндрю Брауна подошел ближе всего к тому, как я думаю, к нему нужно подходить, но (по крайней мере, в 5.1), шаг поставщика услуг не нужен. Ответ Хейсиана подчеркивает использование PSR-4 который приближает нас на один шаг. Вот моя окончательная реализация для помощников в представлениях:

Во-первых, создайте вспомогательный файл в любом месте вашего каталога приложений с пространством имен:

 namespace App\Helpers; class BobFinder { static function bob() { return '<strong>Bob?! Is that you?!</strong>'; } } 

Затем, псевдоним вашего класса в config\app.php , в массиве aliases :

 'aliases' => [ // Other aliases 'BobFinder' => App\Helpers\BobFinder::class ] 

И это должно быть все, что вам нужно. PSR-4 и псевдоним должны показывать помощника вашим взглядам, поэтому, на ваш взгляд, если вы наберете:

 {!! BobFinder::bob() !!} 

Он должен выводить:

 <strong>Bob?! Is that you?!</strong> 

Пользовательские директивы Blade в Laravel 5

Да, есть еще один способ сделать это!

Шаг 1. Зарегистрируйте настраиваемую директиву Blade:

 <?php // code in app/Providers/AppServiceProvider.php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Blade; // <-- This is important! Without it you'll get an exception. class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Make a custom blade directive: Blade::directive('shout', function ($string) { return trim(strtoupper($string), '(\'\')'); }); // And another one for good measure: Blade::directive('customLink', function () { return '<a href="#">Custom Link</a>'; }); } ... 

Шаг 2. Используйте свою собственную директиву Blade:

 <!-- // code in resources/views/view.blade.php --> @shout('this is my custom blade directive!!') <br /> @customLink 

Выходы:

ЭТО МОЕ ДИРЕКТИВЫ ПОЛЬЗОВАТЕЛЯ!
Пользовательская ссылка


Источник: https://laravel.com/docs/5.1/blade#extending-blade

Дополнительное чтение: https://mattstauffer.co/blog/custom-conditionals-with-laravels-blade-directives


Если вы хотите узнать, как лучше всего создавать пользовательские классы, которые вы можете использовать в любом месте , см. « Пользовательские классы в Laravel 5», «Легкий способ»

Это мой файл HelpersProvider.php:

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class HelperServiceProvider extends ServiceProvider { protected $helpers = [ // Add your helpers in here ]; /** * Bootstrap the application services. */ public function boot() { // } /** * Register the application services. */ public function register() { foreach ($this->helpers as $helper) { $helper_path = app_path().'/Helpers/'.$helper.'.php'; if (\File::isFile($helper_path)) { require_once $helper_path; } } } } 

Вы должны создать папку под названием « Helpers в папке app , а затем создать файл под названием whatever.php внутри и добавить строку в массив $ helpers.

Готово!

редактировать

Я больше не использую этот параметр, я в настоящее время использую композитор для загрузки статических файлов, таких как помощники.

Вы можете добавить помощников непосредственно:

 ... "autoload": { "files": [ "app/helpers/my_helper.php", ... ] }, ... 

Для пользовательских вспомогательных библиотек в моем проекте Laravel я создал папку с именем Libraries в моем каталоге Laravel/App Directory и в каталоге Libraries, я создал различные файлы для разных вспомогательных библиотек.

После создания моих вспомогательных файлов я просто включаю все эти файлы в свой файл composer.json, как это

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

и выполнить

 composer dumpautoload 

Поскольку ОП попросил передовой опыт , я думаю, что мы по-прежнему не замечаем здесь хороших советов.

Один файл helpers.php далек от хорошей практики. Во-первых, потому что вы смешиваете множество различных функций, поэтому вы против хороших принципов кодирования. Более того, это может повредить не только документацию по коду, но и кодовые метрики, такие как Cyclomatic Complexity , Index of Tables и Halstead Volume . Чем больше функций у вас, тем больше становится хуже.

Документация кода была бы хорошо с использованием таких инструментов, как phpDocumentor , но с использованием Sami он не будет обрабатывать процедурные файлы . Документация API Laravel – такой случай – документации вспомогательных функций нет: https://laravel.com/api/5.4

Метрики кода можно анализировать с помощью таких инструментов, как PhpMetrics . Использование PhpMetrics версии 1.x для анализа кода структуры Laravel 5.4 даст вам очень плохие показатели CC / MI / HV для файлов src / Illuminate / Foundation / helpers.php и src / Illuminate / Support / helpers.php .

Несколько контекстных вспомогательных файлов (например, string_helpers.php , array_helpers.php и т. Д.), Безусловно, улучшат эти плохие показатели, что приведет к упрощению кода. В зависимости от используемого генератора кода кода это было бы достаточно.

Его можно дополнительно улучшить, используя вспомогательные классы со статическими методами, чтобы они могли быть контекстуализированы с использованием пространств имен. Точно так же, как Laravel уже делает с Illuminate\Support\Str и Illuminate\Support\Arr классы. Это улучшает как показатели кода, так и организацию и документацию. Классовые псевдонимы могут использоваться для упрощения их использования.

Структурирование с помощью классов улучшает организацию кода и документацию, но, с другой стороны, мы теряем те прекрасные короткие и легко запоминающиеся глобальные функции. Мы также можем улучшить этот подход, создав псевдонимы функций для этих методов статических классов. Это можно сделать вручную или динамически.

Первый подход Laravel использует, объявляя функции в процедурных вспомогательных файлах, которые сопоставляются с методами статических классов. Возможно, это не идеальная вещь, так как вам нужно обновить все материалы (docblocks / arguments).
Я лично использую динамический подход с классом HelperServiceProvider который создает эти функции во время выполнения:

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class HelperServiceProvider extends ServiceProvider { /** * The helper mappings for the application. * * @var array */ protected $helpers = [ 'uppercase' => 'App\Support\Helpers\StringHelper::uppercase', 'lowercase' => 'App\Support\Helpers\StringHelper::lowercase', ]; /** * Bootstrap the application helpers. * * @return void */ public function boot() { foreach ($this->helpers as $alias => $method) { if (!function_exists($alias)) { eval("function {$alias}(...\$args) { return {$method}(...\$args); }"); } } } /** * Register the service provider. * * @return void */ public function register() { // } } 

Можно сказать, что это связано с инженерной разработкой, но я так не думаю. Он работает очень хорошо и вопреки тому, что можно ожидать, это не стоит соответствующего времени выполнения, по крайней мере, при использовании PHP 7.x.

Вот сценарий оболочки bash, который я создал, чтобы сделать фасады Laravel 5 очень быстрыми.

Запустите это в своем каталоге установки Laravel 5.

Назовите это так:

 make_facade.sh -f <facade_name> -n '<namespace_prefix>' 

Пример:

 make_facade.sh -f helper -n 'App\MyApp' 

Если вы запустите этот пример, он создаст каталоги Facades и Providers разделе «your_laravel_installation_dir / app / MyApp».

Он будет создавать следующие 3 файла, а также выводит их на экран:

 ./app/MyApp/Facades/Helper.php ./app/MyApp/Facades/HelperFacade.php ./app/MyApp/Providers/HelperServiceProvider.php 

После этого появится сообщение, похожее на следующее:

 =========================== Finished =========================== Add these lines to config/app.php: ---------------------------------- Providers: App\MyApp\Providers\HelperServiceProvider, Alias: 'Helper' => 'App\MyApp\Facades\HelperFacade', 

Поэтому обновите список «Провайдеры» и «Псевдоним» в «config / app.php»

Запустить composer -o dumpautoload

Первоначально «./app/MyApp/Facades/Helper.php» будет выглядеть следующим образом:

 <?php namespace App\MyApp\Facades; class Helper { // } 

Теперь просто добавьте свои методы в «./app/MyApp/Facades/Helper.php».

Вот что выглядит «./app/MyApp/Facades/Helper.php» после добавления функции Helper.

 <?php namespace App\MyApp\Facades; use Request; class Helper { public function isActive($pattern = null, $include_class = false) { return ((Request::is($pattern)) ? (($include_class) ? 'class="active"' : 'active' ) : ''); } } This is how it would be called: =============================== {!! Helper::isActive('help', true) !!} 

Эта функция ожидает шаблон и может принимать необязательный второй логический аргумент.

Если текущий URL-адрес соответствует переданному ему шаблону, он выдает «active» (или «class =» active », если вы добавите« true »в качестве второго аргумента в вызов функции).

Я использую его, чтобы выделить активное меню.

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

 #!/bin/bash display_syntax(){ echo "" echo " The Syntax is like this:" echo " ========================" echo " "$(basename $0)" -f <facade_name> -n '<namespace_prefix>'" echo "" echo " Example:" echo " ========" echo " "$(basename $0) -f test -n "'App\MyAppDirectory'" echo "" } if [ $# -ne 4 ] then echo "" display_syntax exit else # Use > 0 to consume one or more arguments per pass in the loop (eg # some arguments don't have a corresponding value to go with it such # as in the --default example). while [[ $# > 0 ]] do key="$1" case $key in -n|--namespace_prefix) namespace_prefix_in="$2" echo "" shift # past argument ;; -f|--facade) facade_name_in="$2" shift # past argument ;; *) # unknown option ;; esac shift # past argument or value done fi echo Facade Name = ${facade_name_in} echo Namespace Prefix = $(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#') echo "" } function display_start_banner(){ echo '**********************************************************' echo '* STARTING LARAVEL MAKE FACADE SCRIPT' echo '**********************************************************' } # Init the Vars that I can in the beginning function init_and_export_vars(){ echo echo "INIT and EXPORT VARS" echo "====================" # Substitution Tokens: # # Tokens: # {namespace_prefix} # {namespace_prefix_lowerfirstchar} # {facade_name_upcase} # {facade_name_lowercase} # namespace_prefix=$(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#') namespace_prefix_lowerfirstchar=$(echo ${namespace_prefix_in} | sed -e 's#\\#/#g' -e 's/^\(.\)/\l\1/g') facade_name_upcase=$(echo ${facade_name_in} | sed -e 's/\b\(.\)/\u\1/') facade_name_lowercase=$(echo ${facade_name_in} | awk '{print tolower($0)}') # Filename: {facade_name_upcase}.php - SOURCE TEMPLATE source_template='<?php namespace {namespace_prefix}\Facades; class {facade_name_upcase} { // } ' # Filename: {facade_name_upcase}ServiceProvider.php - SERVICE PROVIDER TEMPLATE serviceProvider_template='<?php namespace {namespace_prefix}\Providers; use Illuminate\Support\ServiceProvider; use App; class {facade_name_upcase}ServiceProvider extends ServiceProvider { public function boot() { // } public function register() { App::bind("{facade_name_lowercase}", function() { return new \{namespace_prefix}\Facades\{facade_name_upcase}; }); } } ' # {facade_name_upcase}Facade.php - FACADE TEMPLATE facade_template='<?php namespace {namespace_prefix}\Facades; use Illuminate\Support\Facades\Facade; class {facade_name_upcase}Facade extends Facade { protected static function getFacadeAccessor() { return "{facade_name_lowercase}"; } } ' } function checkDirectoryExists(){ if [ ! -d ${namespace_prefix_lowerfirstchar} ] then echo "" echo "Can't find the namespace: "${namespace_prefix_in} echo "" echo "*** NOTE:" echo " Make sure the namspace directory exists and" echo " you use quotes around the namespace_prefix." echo "" display_syntax exit fi } function makeDirectories(){ echo "Make Directories" echo "================" mkdir -p ${namespace_prefix_lowerfirstchar}/Facades mkdir -p ${namespace_prefix_lowerfirstchar}/Providers mkdir -p ${namespace_prefix_lowerfirstchar}/Facades } function createSourceTemplate(){ source_template=$(echo "${source_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g') echo "Create Source Template:" echo "=======================" echo "${source_template}" echo "" echo "${source_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}.php } function createServiceProviderTemplate(){ serviceProvider_template=$(echo "${serviceProvider_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g') echo "Create ServiceProvider Template:" echo "================================" echo "${serviceProvider_template}" echo "" echo "${serviceProvider_template}" > ./${namespace_prefix_lowerfirstchar}/Providers/${facade_name_upcase}ServiceProvider.php } function createFacadeTemplate(){ facade_template=$(echo "${facade_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g') echo "Create Facade Template:" echo "=======================" echo "${facade_template}" echo "" echo "${facade_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}Facade.php } function serviceProviderPrompt(){ echo "Providers: ${namespace_prefix_in}\Providers\\${facade_name_upcase}ServiceProvider," } function aliasPrompt(){ echo "Alias: '"${facade_name_upcase}"' => '"${namespace_prefix_in}"\Facades\\${facade_name_upcase}Facade'," } # # END FUNCTION DECLARATIONS # ########################### ## START RUNNING SCRIPT ## ########################### display_start_banner init_and_export_vars makeDirectories checkDirectoryExists echo "" createSourceTemplate createServiceProviderTemplate createFacadeTemplate echo "" echo "===========================" echo " Finished TEST" echo "===========================" echo "" echo "Add these lines to config/app.php:" echo "----------------------------------" serviceProviderPrompt aliasPrompt echo "" 

Другой способ, которым я пользовался, был: 1) создал файл в app \ FolderName \ fileName.php и имел этот код внутри него, т.е.

 <?php namespace App\library { class hrapplication{ public static function libData(){ return "Data"; } } } ?> 

2) После этого в нашем клинке

  $FmyFunctions = new \App\FolderName\classsName; echo $is_ok = ($FmyFunctions->libData()); 

это оно. и он работает

Лучшей практикой для написания специальных помощников является

1) Внутри каталога app корневого каталога проекта создайте папку с именем Helpers (просто для разделения и структурирования кода).

2) Внутри папки пишут файлы psr-4 или обычные php-файлы

Если файлы PHP находятся в формате psr-4, то он будет загружен автоматически, иначе добавьте следующую строку в композитор.json, которая находится внутри корневого каталога проекта

Внутри ключа autoload создайте новый ключ с именем files для загрузки файлов во время автоматической загрузки, внутри объекта files добавьте путь, начиная с каталога приложений. Вот пример.

 "autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" }, "files": [ "app/Helpers/customHelpers.php" ] }, "autoload-dev": { "classmap": [ "tests/TestCase.php" ] }, 

PS: попробуйте запустить composer dump-autoload если файл не загружен.

Создайте каталог специальных помощников: сначала создайте каталог помощников в каталоге приложения. Создайте определение класса hlper: Давайте теперь создадим простую вспомогательную функцию, которая объединит две строки. Создайте новый файл MyFuncs.php в /app/Helpers/MyFuncs.php Добавьте следующий код

 <?php namespace App\Helpers; class MyFuncs { public static function full_name($first_name,$last_name) { return $first_name . ', '. $last_name; } } 

пространство имен App \ Helpers; определяет пространство имен Helpers в пространстве имен приложений. class MyFuncs {…} определяет вспомогательный класс MyFuncs. public static function full_name ($ first_name, $ last_name) {…} определяет статическую функцию, которая принимает два строковых параметра и возвращает конкатенированную строку

Служба помощников предоставляет класс

Поставщики услуг используются для классов автоматической загрузки. Нам нужно будет определить поставщика услуг, который будет загружать все наши вспомогательные классы в каталог / app / Helpers.

Запустите следующую команду:

php artisan make: поставщик HelperServiceProvider

Файл будет создан в /app/Providers/HelperServiceProvider.php

 Open /app/Providers/HelperServiceProvider.php 

Добавьте следующий код:

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class HelperServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { foreach (glob(app_path().'/Helpers/*.php') as $filename){ require_once($filename); } } } 

ВОТ,

 namespace App\Providers; defines the namespace provider use Illuminate\Support\ServiceProvider; imports the ServiceProvider class namespace class HelperServiceProvider extends ServiceProvider {…} defines a class HelperServiceProvider that extends the ServiceProvider class public function boot(){…} bootstraps the application service public function register(){…} is the function that loads the helpers foreach (glob(app_path().'/Helpers/*.php') as $filename){…} loops through all the files in /app/Helpers directory and loads them. 

Теперь нам нужно зарегистрировать HelperServiceProvider и создать псевдоним для наших помощников.

Открыть файл /config/app.php

Найдите переменную массива поставщиков

Добавьте следующую строку

 App\Providers\HelperServiceProvider::class, 

Найдите переменную массива псевдонимов

Добавьте следующую строку

 'MyFuncs' => App\Helpers\MyFuncs::class, 

Сохранение изменений Использование нашего специального помощника

Мы создадим маршрут, который вызовет нашу настраиваемую вспомогательную функцию. Откройте /app/routes.php

Добавьте следующее определение маршрута

 Route::get('/func', function () { return MyFuncs::full_name("John","Doe"); }); 

ВОТ,

 return MyFuncs::full_name("John","Doe"); calls the static function full_name in MyFuncs class 

in dir bootstrap \ autoload.php

 require __DIR__.'/../vendor/autoload.php'; require __DIR__.'/../app/Helpers/function.php'; //add 

добавить этот файл

 app\Helpers\function.php 

вместо того, чтобы включать ваш собственный вспомогательный класс, вы можете фактически добавить в свой файл config/app.php под псевдонимами.

должен выглядеть так.

  'aliases' => [ ... ... 'Helper' => App\Http\Services\Helper::class, ] 

а затем к вашему контроллеру, включите Помощник, используя метод «Использовать Помощник», чтобы вы могли просто вызвать некоторый метод в своем классе Helper.

 eg. Helper::some_function(); 

или в представлении ресурсов вы можете напрямую вызвать класс Helper.

 eg. {{Helper::foo()}} 

Но это все-таки стиль стиля программирования для разработчиков, которым нужно следовать. У нас может быть другой способ решения проблем, и я просто хочу поделиться тем, что у меня есть для новичков.

В laravel 5.3 и выше команда laravel перемещала все процедурные файлы ( routes.php ) из каталога app/ , а вся папка app/ psr-4 загружена автоматически. Принятый ответ будет работать в этом случае, но мне это не кажется правильным.

Итак, что я сделал, я создал каталог helpers/ в корне моего проекта и помещал в него файлы-помощники, и в моем файле composer.json я сделал это:

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

Таким образом, мое app/ каталог по-прежнему является автозагрузкой psr-4, а помощники немного лучше организованы.

Надеюсь, это поможет кому-то.

Здесь есть отличные ответы, но я думаю, что это самое простое. В Laravel 5.4 (и более ранних версиях) вы можете создать класс, удобный для вас, например App / Libraries / Helper.php

 class Helper() { public function uppercasePara($str) { return '<p>' .strtoupper($str). '<p>; } } 

Затем вы можете просто называть его в своем шаблоне Blade следующим образом:

 @inject('helper', \App\Libraries\Helper) {{ $helper->drawTimeSelector() }} 

Если вы не хотите использовать @inject, просто сделайте функцию «uppercasePara» статичной и вставьте вызов в свой шаблон Blade следующим образом:

 {{ \App\Libraries\Helper::drawTimeSelector() }} 

Нет необходимости в псевдонимах. Laravel автоматически разрешает конкретный класс.

Сначала создайте helpers.php внутри каталога App \ Http. Затем добавьте следующий код внутри composer.json

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

Затем выполните следующую команду

 composer dump-autoload 

Now you can define your custom function inside the helpers.php file. Here you can get the full guide

Create Helpers.php in app/Helper/Helpers.php namespace App\Helper class Helpers {

}

Add in composer and composer update

  "autoload": { "classmap": [ "database/seeds", "database/factories", "database","app/Helper/Helpers.php" ], "psr-4": { "App\\": "app/" }, "files": ["app/Helper/Helpers.php"] }, 

use in Controller

 use App\Helper\Helpers