Laravel 5.4 中的自定义助手 类
Custom helper classes in Laravel 5.4
我在 app/Helpers
有一些帮手 classes。我如何使用 service provider
加载这些 classes 以在 blade 模板中使用它们?
例如如果我有一个 class CustomHelper
包含一个方法 fooBar()
:
<?php
nampespace App\Helpers;
class CustomHelper
{
static function fooBar()
{
return 'it works!';
}
}
我希望能够在我的 blade 模板中执行类似的操作:
{{ fooBar() }}
而不是这样做:
{{ \App\Helpers\CustomHelper::fooBar() }}
P.S: @andrew-brown 的 in 处理 non-class 文件。最好有一个基于 class 的解决方案,以便可以在 class 之间组织辅助函数。
我认为当您的 类 中有代码时,不可能只使用函数。好吧,您可以尝试扩展 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();
}
}
因此您定义了全局函数,但实际上所有函数都可能使用某些 类.
中的特定 public 方法
顺便说一下,这正是 Laravel 为自己的助手所做的,例如:
if (! function_exists('array_add')) {
function array_add($array, $key, $value)
{
return Arr::add($array, $key, $value);
}
}
如您所见,array_add
只是更短(或可能更简洁)的写作方式 Arr::add
我在 app/Helpers
有一些帮手 classes。我如何使用 service provider
加载这些 classes 以在 blade 模板中使用它们?
例如如果我有一个 class CustomHelper
包含一个方法 fooBar()
:
<?php
nampespace App\Helpers;
class CustomHelper
{
static function fooBar()
{
return 'it works!';
}
}
我希望能够在我的 blade 模板中执行类似的操作:
{{ fooBar() }}
而不是这样做:
{{ \App\Helpers\CustomHelper::fooBar() }}
P.S: @andrew-brown 的
我认为当您的 类 中有代码时,不可能只使用函数。好吧,您可以尝试扩展 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();
}
}
因此您定义了全局函数,但实际上所有函数都可能使用某些 类.
中的特定 public 方法顺便说一下,这正是 Laravel 为自己的助手所做的,例如:
if (! function_exists('array_add')) {
function array_add($array, $key, $value)
{
return Arr::add($array, $key, $value);
}
}
如您所见,array_add
只是更短(或可能更简洁)的写作方式 Arr::add