Laravel 5.4中的自定义帮助类
问题描述:
我在app/Helpers
中有一些帮助类。如何使用service provider
加载这些类以在刀片模板中使用它们?Laravel 5.4中的自定义帮助类
例如如果我有一个类CustomHelper
包含方法fooBar()
:
<?php
nampespace App\Helpers;
class CustomHelper
{
static function fooBar()
{
return 'it works!';
}
}
我希望能够做我的刀模板是这样的:
{{ fooBar() }}
,而不是这样做:
{{ \App\Helpers\CustomHelper::fooBar() }}
PS: @ andrew-brown's answer in Best practices for custom helpers on Laravel 5 deals wi th非类文件。有一个基于类的解决方案将是很好的,这样辅助函数就可以在类中组织起来。
答
我不认为只有在类中有代码时才可以使用函数。那么,你可以尝试扩展刀片,但它太多了。
你应该做的是创建一个额外的文件,例如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
文件并在app/Helpers/helpers.php
文件中运行
composer dump-autoload
现在您可以添加这些自定义功能,例如:
if (! function_exists('fooBar')) {
function fooBar()
{
return \App\Helpers\CustomHelper::fooBar();
}
}
所以你定义了全局函数,但实际上它们都可能使用某些类的特定公共方法。
通过这正是Laravel确实为自己的助手例如方式:
if (! function_exists('array_add')) {
function array_add($array, $key, $value)
{
return Arr::add($array, $key, $value);
}
}
如你所见array_add
只有较短的(或者更简洁)的方式书写Arr::add
的
HTTPS:/ /laravel.io/forum/02-03-2015-best-practices-for-custom-helpers-on-laravel-5?page=1#reply-20564 – hassan
也http://stackoverflow.com/a/32772686/ 2359679 – hassan
你想实现一个基于类的解决方案,但使用它像一个全局函数?不要以为这是可能的任何语言,更不用说PHP或laravel – Paras