2017-04-02 106 views
11

我在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非类文件。有一个基于类的解决方案将是很好的,这样辅助函数就可以在类中组织起来。

+0

HTTPS:/ /laravel.io/forum/02-03-2015-best-practices-for-custom-helpers-on-laravel-5?page=1#reply-20564 – hassan

+0

也http://stackoverflow.com/a/32772686/ 2359679 – hassan

+0

你想实现一个基于类的解决方案,但使用它像一个全局函数?不要以为这是可能的任何语言,更不用说PHP或laravel – Paras

回答

27

我不认为只有在类中有代码时才可以使用函数。那么,你可以尝试扩展刀片,但它太多了。

你应该做的是创建一个额外的文件,例如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