我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?
我想创建帮助函数,以避免在Laravel视图之间重复代码。例如:
view.blade.php
<p>Foo Formated text: {{ fooFormatText($text) }}</p>
它们基本上是文本格式化函数。我应该如何定义全局可用的帮助函数,如fooFormatText()?
在你的app文件夹中创建一个helpers.php文件,并用composer加载它:
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helpers.php" // <---- ADD THIS
]
},
然后把它添加到你的作曲家。Json文件,执行如下命令:
composer dump-autoload
如果您不喜欢将helpers.php文件保存在app目录中(因为它不是一个PSR-4命名空间类文件),您可以做laravel.com网站所做的事情:将helpers.php存储在bootstrap目录中。记得在你的作曲器中设置它。json文件:
"files": [
"bootstrap/helpers.php"
]
我最初的想法是作曲家的自动加载,但它对我来说不太像Laravel 5。L5大量使用了服务提供者,它们引导你的应用程序。
首先,我在我的应用程序目录中创建了一个名为Helpers的文件夹。然后在Helpers文件夹中,我为我想添加的功能添加了文件。在一个文件夹中放置多个文件可以避免一个大文件变得太长而难以管理。
接下来,我通过运行artisan命令创建了一个HelperServiceProvider.php:
artisan make:provider HelperServiceProvider
在register方法中,我添加了这个代码片段
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
最后,在config/app.php的providers数组中注册服务提供者
'providers' => [
'App\Providers\HelperServiceProvider',
]
现在,您的Helpers目录中的任何文件都已加载,并准备使用。
更新2016-02-22
There are a lot of good options here, but if my answer works for you, I went ahead and made a package for including helpers this way. You can either use the package for inspiration or feel free to download it with Composer as well. It has some built in helpers that I use often (but which are all inactive by default) and allows you to make your own custom helpers with a simple Artisan generator. It also addresses the suggestion one responder had of using a mapper and allows you to explicitly define the custom helpers to load, or by default, automatically load all PHP files in your helper directory. Feedback and PRs are much appreciated!
composer require browner12/helpers
Github:布朗纳12/助手
这是JeffreyWay在Laracasts讨论中提出的建议。
在你的app/Http目录中,创建一个helpers.php文件并添加你的函数。 在作曲家。在自动加载块中添加"files": ["app/Http/helpers.php"]。 运行composer dump-autoload。
这是我的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。
完成了!
Edit
我不再使用这个选项,我目前使用作曲家加载静态文件,如帮助。
你可以直接在:
...
"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”下创建目录Facades和Providers。
它将创建以下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列表
运行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 (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中的自定义Blade指令。
步骤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:在项目根目录下运行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!!');
}
...
来源: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和谷歌上筛选了各种各样的答案后,我仍然没有找到一个最佳的方法。大多数答案建议我们离开应用程序,依靠第三方工具Composer来完成工作,但我不相信仅仅为了包含一个文件而耦合到一个工具是明智的。
Andrew Brown的回答最接近我认为应该如何处理它,但是(至少在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项目中的自定义助手库,我在我的Laravel/App目录中创建了一个名为Libraries的文件夹,在Libraries目录中,我为不同的助手库创建了各种文件。
在创建我的助手文件后,我简单地将所有这些文件包含在我的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>';
});
}
...
步骤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中的自定义类,简单方法
我使用的另一种方法是: 1)在应用程序\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/目录,并把helper文件放在里面,放在我的composer中。我这样做:
...
"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 key中,创建一个名为files的新key来在自动加载时加载文件,在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 Volume等代码指标。函数越多,情况就越糟。
使用phpDocumentor这样的工具,代码文档是可以的,但使用Sami,它不会呈现过程性文件。Laravel API文档就是这样一种情况——没有辅助函数文档:https://laravel.com/api/5.4
代码度量可以使用PhpMetrics等工具进行分析。使用PhpMetrics版本1。src/Illuminate/Foundation/helpers.php和src/Illuminate/Support/helpers.php文件的CC/MI/HV指标都非常糟糕。
多个上下文帮助文件(例如。String_helpers.php, array_helpers.php等)肯定会改善这些糟糕的指标,从而使代码更容易维护。根据所使用的代码文档生成器,这就足够了。
可以通过使用带有静态方法的helper类来进一步改进,这样它们就可以使用名称空间进行上下文化。就像Laravel已经对Illuminate\Support\Str和Illuminate\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;
}
}
名称空间的应用程序\助手;在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"]
},
在控制器中使用
use App\Helper\Helpers
视图中使用 修改config->app.php文件
'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()}}
但这仍然是开发人员应该遵循的编码风格。我们可能有不同的解决问题的方法,我也想把我的方法分享给初学者。
**
地位的助手
** 创建新助手
<?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 然后加入作曲家。json文件
"autoload": { "classmap": [ "database"], "psr-4": { "App\\": "app/" },
"files": ["helpers/examplehelper.php" ]},
我知道现在回答这个问题已经很晚了,但是,这个问题每天都发生在所有初级开发人员身上,所以对于直接步骤,请执行以下步骤:
**将你的helper函数分组到类中(使用刀片中的函数只是使它们静态),并将所有类放在配置Laravel文件夹app.php别名
'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