2017-04-02 29 views
11

私はいくつかのヘルパークラスをapp/Helpersに持っています。ブレードテンプレートでこれらのクラスを使用するには、service providerを使用してこれらのクラスをロードするにはどうすればよいですか?Laravelのカスタムヘルパークラス5.4

私はこの方法fooBar()を含むクラスCustomHelperお持ちの場合:代わりにこれを行うの

{{ fooBar() }} 

<?php 

nampespace App\Helpers; 

class CustomHelper 
{ 
    static function fooBar() 
    { 
     return 'it works!'; 
    } 
} 

を私は私の刃テンプレートでこのような何かを行うことができるようにしたい

{{ \App\Helpers\CustomHelper::fooBar() }} 

PS: @アンドリューブラウンのanswerBest practices for custom helpers on Laravel 5の取引wi非クラスファイルです。ヘルパー関数をクラス間で編成できるように、クラスベースのソリューションを用意することは良いことです。

+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ファイルで、1つの余分のファイルを作成してやるべきことは置く:

"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