如何在Laravel中创建自定义助手函数

我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:

view.blade.php

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

它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?

339425 次浏览

在你的app文件夹中创建一个helpers.php文件,并用composer加载它:

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

将其添加到composer.json文件后,运行以下命令:

composer dump-autoload

如果您不喜欢将helpers.php文件保存在app目录中(因为它不是PSR-4命名空间类文件),您可以做laravel.com网站所做的事情:存储helpers.php 在引导目录中。记得在你的composer.json文件中设置它:

"files": [
"bootstrap/helpers.php"
]

我最初的想法是作曲家的自动加载,但它对我来说不太像Laravel 5。L5大量使用了服务提供者,它们引导你的应用程序。

首先,我在app目录中创建了一个名为Helpers的文件夹。然后在Helpers文件夹中,我添加了我想要添加的功能的文件。拥有一个包含多个文件的文件夹可以让我们避免一个大文件变得太长且难以管理。

接下来我通过运行artisan命令创建了一个HelperServiceProvider.php:

artisan make:provider HelperServiceProvider

register方法中,我添加了这个代码片段

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

最后在providers数组中的config/app.php中注册服务提供者

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

现在,Helpers目录中的任何文件都已加载,并准备使用。

更新2016-02-22

这里有很多不错的选择,但如果我的答案对你有用,我继续做了一个包,以这种方式包含helper。您可以使用该软件包来获得灵感,也可以使用Composer免费下载。它有一些我经常使用的内置助手(但默认情况下都是不活动的),并允许您使用简单的Artisan生成器制作自己的自定义助手。它还解决了响应者使用映射器的建议,并允许您显式地定义自定义helper来加载(或默认情况下自动加载helper目录中的所有PHP文件)。非常感谢反馈和pr !

composer require browner12/helpers

Github: # EYZ0

这是Laracasts讨论JeffreyWay的建议。

  1. app/Http目录中,创建helpers.php文件并添加函数。
  2. composer.json中,在autoload块中,添加"files": ["app/Http/helpers.php"]
  3. # EYZ0运行。

这是我的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;
}
}
}
}

你应该在app文件夹下创建一个名为Helpers的文件夹,然后在里面创建一个名为whatever.php的文件,并在$helpers数组中添加字符串whatever

完成了!

编辑

我不再使用这个选项,我目前使用作曲家加载静态文件,如帮助。

你可以直接在:

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

下面是我创建的一个bash shell脚本,用于快速制作Laravel 5外观。

在Laravel 5安装目录中运行这个程序。

这样叫它:

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

例子:

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

如果你运行这个例子,它会在your_laravel_installation_dir/app/MyApp下创建目录FacadesProviders

它将创建以下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'中的Providers和Alias列表

运行# EYZ0

"./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 (e.g.
# 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 ""

Laravel 5中的自定义类,简单的方法

这个答案适用于Laravel中的一般自定义类。关于blade的具体答案,请参见Laravel 5中的自定义刀片指令

创建你的Helpers(或其他自定义类)文件,并给它一个匹配的命名空间。编写你的类和方法:

<?php // Code within app\Helpers\Helper.php


namespace App\Helpers;


class Helper
{
public static function shout(string $string)
{
return strtoupper($string);
}
}

创建一个别名:

<?php // Code within config/app.php


'aliases' => [
...
'Helper' => App\Helpers\Helper::class,
...

步骤3:在项目根目录下运行composer dump-autoload

在你的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!!');
}
...

来源:# EYZ0

为什么它工作:https://github.com/laravel/framework/blob/master/src/Illuminate/Support/ClassLoader.php

Where autoloading起源于: # EYZ0 < / p >

在SO和谷歌上筛选了各种各样的答案后,我仍然没有找到一个最佳的方法。大多数答案建议我们离开应用程序,依靠第三方工具Composer来完成工作,但我不相信仅仅为了包含一个文件而耦合到一个工具是明智的。

安德鲁·布朗的回答最接近我认为它应该如何处理,但是(至少在5.1中),服务提供者步骤是不必要的。Heisian的回答突出了PSR-4的使用,这使我们更接近了一步。下面是视图中helper的最终实现:

首先,在你的app目录中创建一个helper文件,命名空间为:

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和别名应该向你的视图公开helper,所以在你的视图中,如果你输入:

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

它应该输出:

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

对于我的Laravel项目中的自定义Helper库,我在我的Laravel/App目录中创建了一个名为Libraries的文件夹,在Libraries目录中,我为不同的Helper库创建了各种文件。

在创建我的助手文件后,我简单地将所有这些文件包括在我的composer.json文件中,就像这样

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

和执行

composer dump-autoload

Laravel 5自定义刀片指令

是的,有另一个的方法来做到这一点!

注册一个自定义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>';
});
}
...

使用你的自定义Blade指令:

<!-- // code in resources/views/view.blade.php -->


@shout('this is my custom blade directive!!')
<br />
@customLink

输出:

这是我的自定义刀片指令!!
# EYZ0 < / p >

来源:# EYZ0

附加阅读:https://mattstauffer.co/blog/custom-conditionals-with-laravels-blade-directives


如果您想了解如何最好地制作可以使用在任何地方的自定义类,请参阅Laravel 5中的自定义类,简单的方法

我使用的另一种方法是: 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());

就是这样。这是可行的

在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自动加载的目录,并且帮助程序组织得更好一些。

在dir bootstrap\autoload.php中

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

添加这个文件

app\Helpers\function.php

编写自定义helper的最佳实践是

1)在项目根目录的app目录中,创建一个名为Helpers的文件夹(只是为了分离和构造代码)。

2)在文件夹中写入psr-4文件或普通php文件

如果PHP文件的格式是psr-4,那么它将被自动加载,否则在编写器中添加以下行。Json,在项目根目录中

autoload键中,创建一个名为files的新键来在自动加载时加载文件,在files对象中添加从app目录开始的路径。这里有一个例子。

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

PS:如果文件没有加载,试着运行composer dump-autoload

由于OP要求最佳实践,我认为我们仍然缺少一些好的建议。

单一的helpers.php文件远非一个好的实践。首先,因为你混合了很多不同类型的函数,所以你违背了良好的编码原则。此外,可以不仅损害了代码文档,还损害了圈复杂度可维护性指数Halstead体积等代码指标。函数越多,情况就越糟。

代码文档使用phpDocumentor之类的工具是可以的,但是使用萨米则是不会渲染过程文件。Laravel API文档就是这样一种情况——没有辅助函数文档:https://laravel.com/api/5.4

代码度量可以使用PhpMetrics之类的工具进行分析。使用PhpMetrics版本1。用x来分析Laravel 5.4框架代码会给你非常糟糕的< em > src /照明/基础/ helpers.php < / em >< em > src /照明/支持/ helpers.php < / em >文件的CC/MI/HV指标。

多个上下文帮助文件(例如。string_helpers.phparray_helpers.php等)肯定会改善这些糟糕的指标,从而使代码更容易维护。根据所使用的代码文档生成器,这就足够了。

可以通过使用带有静态方法的helper类来进一步改进,这样它们就可以使用名称空间进行上下文化。就像Laravel已经对Illuminate\Support\StrIlluminate\Support\Arr类所做的那样。这改进了代码度量/组织和文档。可以使用类别名使它们更易于使用。

用类来构造结构使代码组织和文档更好,但另一方面,我们最终失去了那些伟大的、简短的、容易记住的全局函数。我们可以通过为这些静态类方法创建函数别名来进一步改进这种方法。这既可以手动完成,也可以动态完成。

Laravel内部使用第一种方法,在映射到静态类方法的过程帮助文件中声明函数。这可能不是理想的事情,因为你需要重新声明所有的东西(文档块/参数) 我个人使用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时不会花费相关的执行时间。

这里有一些很好的答案,但我认为这是最简单的。 在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自动解析具体类。

创建自定义助手目录: 首先在app目录中创建Helpers目录。 创建hlper类定义: 现在让我们创建一个简单的辅助函数,它将连接两个字符串。在/app/Helpers/MyFuncs.php中创建一个新文件MyFuncs.php

<?php


namespace App\Helpers;


class MyFuncs {


public static function full_name($first_name,$last_name) {
return $first_name . ', '. $last_name;
}
}
< p >名称空间应用\助手;在App namespace下定义了Helpers命名空间。 类MyFuncs{…}定义了帮助类MyFuncs。 公共静态函数full_name($first_name,$last_name){…}定义了一个静态函数,该函数接受两个字符串参数,并返回一个连接的字符串

帮工服务提供类

服务提供者用于自动加载类。我们需要定义一个服务提供者,它将加载/app/Helpers目录下的所有helper类。

执行以下artisan命令:

php工匠使:提供者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文件

找到providers数组变量

添加以下行

App\Providers\HelperServiceProvider::class,

定位aliases数组变量

添加以下行

'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
首先在App\Http目录中创建helpers.php。 然后在composer.json

中添加以下代码
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Http/helpers.php"
],
"psr-4": {
"App\\": "app/"
}
},

执行如下命令

composer dump-autoload

现在可以在helpers.php文件中定义自定义函数。

在app/Helper/Helpers.php中创建Helpers.php

namespace App\Helper
class Helpers
{




}

添加作曲家和作曲家更新

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

# EYZ0

use App\Helper\Helpers

use in view change in config->app.php file

   'aliases' => [
...
'Helpers'   => 'App\Helper\Helpers'
],

视图中调用

<?php echo Helpers::function_name();  ?>

而不是包括您的自定义helper类,您实际上可以在别名下添加到config/app.php文件中。

应该是这样的。

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

然后到你的控制器,使用'use Helper'方法包括Helper,这样你就可以简单地在你的Helper类上调用一些方法。

eg. Helper::some_function();

或者在资源视图中,您可以直接调用Helper类。

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

但这仍然是开发人员应该遵循的编码风格。我们可能有不同的解决问题的方法,我也想把我的方法分享给初学者。

**

  • < em >状态辅助< / em >
< p > * * 创建新的helper

<?php


namespace App\Helpers;


use Illuminate\Database\Eloquent\Collection;


class StatusHelper
{
protected static $_status = [
1=> [
'value' => 1,
'displayName' => 'Active',
],
2 => [
'value' => 2,
'displayName' => 'Inactive',
],
3 => [
'value' => 3,
'displayName' => 'Delete',
],


];


public static function getStatusesList()
{
$status = (new Collection(self::$_status))->pluck('displayName', 'value')->toArray();




return $status;
}
}

用于控制器和任何视图文件

use App\Helpers\StatusHelper;


class ExampleController extends Controller
{
public function index()
{
$statusList = StatusHelper::getStatusesList();


return view('example.index', compact('statusList'));
}
}
App/Helpers/中创建新文件examplehelper.php 然后添加composer.json文件

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

我知道现在回答这个问题已经很晚了,但是,这个问题每天都发生在所有初级开发人员身上,所以对于直接步骤,请执行以下步骤:

**将你的helper函数分组到类中(使用刀片中的函数只是使它们静态)&把所有的类都放在Laravel配置文件夹app.php aliases中

'aliases' => [
"YourClassName" => App\Support\YourClassName,
]

现在你可以在刀片和控制器上使用所有的静态函数了。

首先在App\Helpers\Helper.php中创建你的Helper文件/类 比如:

<?php


namespace App\Helpers;


class Helper {


// Your customer public function
}
然后在Composer.json中定义它 在交通量 然后运行composer dump-autoload