2017-04-02 96 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