Рекомендации для пользовательских помощников на Laravel 5
Я хотел бы создать некоторые помощники (функции), чтобы избежать повторения кода между некоторыми представлениями в стиле L5:
вид.лезвие.в PHP
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
они в основном функции форматирования текста. Где и как я могу поместить файл с этими функциями?
20 ответов
создать helpers.php
файл в папке приложения и загрузить его с composer:
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\": "app/"
},
"files": [
"app/helpers.php" // <---- ADD THIS
]
},
после добавления этого к вашему composer.json
file, выполните следующую команду:
composer dump-autoload
Если вам не нравится держать свой в своем app
каталог (потому что это не файл класса пространства имен PSR-4), Вы можете сделать то, что laravel.com
сайт: магазин helpers.php
в каталоге начальной загрузки. Не забудьте установить его в свой composer.json
файл:
"files": [
"bootstrap/helpers.php"
]
моя первоначальная мысль была автозагрузкой композитора, но она не казалась мне очень Laravel 5ish. L5 активно использует поставщиков услуг,они являются тем, что загружает ваше приложение.
для начала я создал папку в моих файл Helpers
каталог загружен и готов к использованию.
обновление 2016-02-22
есть много хороших вариантов, но если мой ответ работает для вас, я пошел вперед и сделал пакет для включения помощников таким образом. Вы можете либо использовать пакет для вдохновения, либо скачать его с помощью Composer. Он имеет некоторые встроенные помощники, которые я часто использую (но которые по умолчанию неактивны), и позволяет создавать собственные пользовательские помощники с помощью простого генератора Artisan. Он также обращается к предложению одного ответчика использовать mapper и позволяет явно определить пользовательские помощники для загрузки или по умолчанию автоматически загружать все PHP-файлы в вашем вспомогательный каталог. Обратная связь и PRs очень ценятся!
composer require browner12/helpers
Github:browner12 / помощники
пользовательские классы в Laravel 5, простой способ
этот ответ применим к общие пользовательские классы в Laravel. Для получения более конкретного ответа на Blade см. пользовательские директивы лезвия в Laravel 5.
Шаг 1: создайте файл Helpers (или другой пользовательский класс) и дайте ему соответствующее пространство имен. Напишите свой класс и метод:
<?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: используйте его в шаблоне лезвия:
<!-- 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
просеяв множество ответов на SO и Google, я все еще не мог найти оптимальный подход. Большинство ответов предлагают оставить приложение и полагаться на 3rd party Tool Composer для выполнения этой работы, но я не уверен, что соединение с инструментом просто для включения файла разумно.
ответ Эндрю Брауна подошел ближе всего к тому, как я думаю, что к нему следует подойти, но (по крайней мере, в 5.1), шаг поставщика услуг не нужен. Heisian это подчеркивает использование PSR-4
что приближает нас на один шаг. Вот моя окончательная реализация для помощников в views:
сначала создайте вспомогательный файл в любом месте каталога приложений с пространством имен:
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>
пользовательские директивы лезвия в 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
выходы:
ЭТО МОЯ ПОЛЬЗОВАТЕЛЬСКАЯ ДИРЕКТИВА BLADE!!
Пользовательские Ссылке
источник: 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
внутри и добавьте строку whatever
внутри массива $ helpers.
готово!
редактировать
Я больше не использую эту опцию, в настоящее время я использую composer для загрузки статических файлов, таких как helpers.
вы можете добавить помощников непосредственно в:
...
"autoload": {
"files": [
"app/helpers/my_helper.php",
...
]
},
...
для пользовательских вспомогательных библиотек в моем проекте Laravel я создал папку с именем Libraries
в своем Laravel/App
каталог и в каталоге библиотек я создал различные файлы для разных вспомогательных библиотек.
после создания моих вспомогательных файлов я просто включаю все эти файлы в свой композитор.в JSON такой
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Libraries/commonFunctions.php"
],
"psr-4": {
"App\": "app/"
}
},
...
и выполнить
composer dumpautoload
так как OP попросил лучшие практики, Я думаю, нам все еще не хватает хороших советов.
один помощников.в PHP файл далек от хорошей практики. Во-первых, потому, что вы смешиваете много разных функций, поэтому вы против хороших принципов кодирования. Более того, это мог бы повредить не только документацию кода, но и показатели кода, такие как Цикломатическая Сложность, Ремонтопригодность Индекс и Объем Холстед. Чем больше у вас функций, тем хуже.
документация кода будет в порядке, используя такие инструменты, как документатора РНР, но через сами это не будет отображать процедурные файлы. Документация Laravel API-это такой случай - нет документации вспомогательных функций:https://laravel.com/api/5.4
метрики кода можно анализировать с помощью таких инструментов, как PhpMetrics. С помощью PhpMetrics Версия 1.x для анализа кода Laravel 5.4 framework даст вам очень плохие показатели CC/MI/HV для обоих src / Illuminate / Foundation / helpers.в PHP и src / подсветка / поддержка / помощники.в PHP файлы.
несколько контекстных вспомогательных файлов (например. string_helpers.в PHP, array_helpers.в PHP, etc.), безусловно, улучшит эти плохие показатели, что приведет к более простому коду для mantain. В зависимости от кода генератор документации, используемый этим, был бы достаточно хорош.
его можно улучшить, используя вспомогательные классы со статическими методами, чтобы они могли быть контекстуализированы с помощью пространств имен. Так же, как 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'
Run composer -o dumpautoload
в "./ app / MyApp / фасады / помощник.php " изначально будет выглядеть так:
<?php
namespace App\MyApp\Facades;
class Helper
{
//
}
теперь просто добавьте ваши методы "./ app / MyApp / фасады / помощник.РНР."
вот что "./ app / MyApp / фасады / помощник.php " выглядит после того, как я добавил Вспомогательная функция.
<?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 )" -f <facade_name> -n '<namespace_prefix>'"
echo ""
echo " Example:"
echo " ========"
echo " "$(basename ) -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 (e.g.
# some arguments don't have a corresponding value to go with it such
# as in the --default example).
while [[ $# > 0 ]]
do
key=""
case $key in
-n|--namespace_prefix)
namespace_prefix_in=""
echo ""
shift # past argument
;;
-f|--facade)
facade_name_in=""
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/g')
facade_name_upcase=$(echo ${facade_name_in} | sed -e 's/\b\(.\)/\u/')
facade_name_lowercase=$(echo ${facade_name_in} | awk '{print tolower()}')
# 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 ""
создать каталог пользовательских помощников: Сначала создайте каталог помощников в App directory. создать определение класса hlper: Теперь давайте создадим простую вспомогательную функцию, которая объединит две строки. Создайте новый файл виде myfuncs.php в /app / помощники / 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 в разделе пространство имен App. класс MyFuncs { ... } определяет вспомогательный класс MyFuncs. публичная статическая функция full_name($имя,$фамилия) {...} определяет статическую функцию, которая принимает два строковых параметра и возвращает объединенную строку
служба помощников обеспечивает класс
поставщики услуг используются для автоматической загрузки классов. Нам нужно будет определить поставщика услуг, который загрузит все наши вспомогательные классы в каталог/app / Helpers.
выполните следующую команду artisan:
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 и создать псевдоним для наших помощников.
открыть
найдите переменную массива providers
добавить следующую строку
App\Providers\HelperServiceProvider::class,
подобрать массив алиасов переменная
добавить следующую строку
'MyFuncs' => App\Helpers\MyFuncs::class,
Сохранить изменения Используя наш пользовательский помощник
мы создадим маршрут, который вызовет нашу пользовательскую вспомогательную функцию Open / 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
другой способ, который я использовал, был: 1) создал файл в app\FolderName\fileName.php и имел этот код внутри него.e
<?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
если файл не загружается.
в dir bootstrap\autoload.в PHP
require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/../app/Helpers/function.php'; //add
добавить этот файл
app\Helpers\function.php
создать помощников.php внутри каталога App\Http. Затем добавьте следующий код внутри композитора.в JSON
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Http/helpers.php"
],
"psr-4": {
"App\": "app/"
}
},
далее выполните следующую команду
composer dump-autoload
теперь вы можете определить пользовательскую функцию внутри помощники.PHP-файл. Здесь вы можете получить полное руководство
я не согласен со всеми другими ответами на этот вопрос!
во-первых, нет ничего плохого в наличии нескольких глобальных вспомогательных функций. Например, приложению, над которым я сейчас работаю, пять лет (оно началось на Laravel 3!) и имеет в общей сложности всего шесть глобальных функций, которые часто используются для форматирования даты и отладки. Нет никаких столкновений с любыми другими функциями в глобальном пространстве имен, и по своей сути они являются не объектно-ориентированные, так зачем делать их статическими методами в классе контейнера? Одна вещь, которую я считаю хуже, чем полагаться слишком сильно на простые старые функции, - это упаковывать их в классы и обманывать себя, думая, что вы сейчас делаете что-то Правильно. Кроме того, префикс этих вспомогательных функций с именем класса или псевдонимом класса просто ужасно больно, поэтому я предпочитаю держать их как простые глобальные функции.
во-вторых, если мы хотим говорить о чистоте кода, мы не должны рассматривать решение, которое падает в любом месте app/
как app/
папка предназначена только для классов PSR-4.
кроме того, я думаю, что многие ответы просто слишком сложны. Создание новых классов провайдеров только для автоматической загрузки кучи другого кода, когда уже есть отличное место для автоматической загрузки кода, просто глупо.
я заметил только один ответ, который рассматривал изменение bootstrap/autoload.php
, который, по моему мнение, это абсолютно самое подходящее место для подключения. Нет правила, написанного или иного, которое говорит, что мы не должны изменять этот файл. Конечно, вам нужно проверить, изменяется ли он с одного выпуска Laravel на следующий, но то же самое касается файлов конфигурации, классов провайдеров, очереди и т. д.
поэтому я считаю, что самым простым и наиболее подходящим решением является создание файла в bootstrap
папка с именем helpers.php
и добавьте следующую строку в конце boostrap/autoload.php
:
require __DIR__.'/helpers.php';
тот другой ответ, который предложил изменить autoload.php
был почти идеальный ответ (ИМО), за исключением того, что они предложили положить function.php
на
Создать Помощников.php в приложении / Helper / Helpers.в PHP
namespace App\Helper
class Helpers
{
}
добавить в composer и composer update
"autoload": {
"classmap": [
"database/seeds",
"database/factories",
"database","app/Helper/Helpers.php"
],
"psr-4": {
"App\": "app/"
},
"files": ["app/Helper/Helpers.php"]
},
использовать в контроллере
use App\Helper\Helpers
использовать в поле зрения изменение в config - >app.файл php
'aliases' => [
...
'Helpers' => 'App\Helper\Helpers'
],
call in view
<?php echo Helpers::function_name(); ?>
в laravel 5.3 и выше команда laravel переместила все процедурные файлы (routes.php
) из и psr-4
подгружаться. Принятый ответ будет работать в этом случае, но он не кажется мне правильным.
так что я сделал, я создал helpers/
каталог в корне моего проекта и поместите вспомогательные файлы внутри этого и в мой composer.json
файл я сделал это:
...
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
},
"files": [
"helpers/ui_helpers.php"
]
},
...
мой
здесь есть несколько отличных ответов, но я думаю, что это самый простой. В Laravel 5.4 (и prob более ранних версиях) вы можете создать класс где-нибудь удобно для вас, например, приложение/библиотеки/помощник.в PHP
class Helper() {
public function uppercasePara($str) {
return '<p>' .strtoupper($str). '<p>;
}
}
тогда вы можете просто назвать его в своем шаблоне лезвия следующим образом:
@inject('helper', \App\Libraries\Helper)
{{ $helper->drawTimeSelector() }}
Если вы не хотите использовать @inject, просто сделайте функцию "uppercasePara" статической и вставьте вызов в свой шаблон Blade следующим образом:
{{ \App\Libraries\Helper::drawTimeSelector() }}
нет необходимости для псевдонимов. Laravel разрешает конкретный класс автоматически.