2015-09-06 32 views
20

Bazı oauth öğelerinde currentUser() işlevini gerçekleştirmek istediğimde, bunu bir görünümde veya bir denetleyicide kullanabileceğim yapıyorum (uygulama denetleyicilerinde helper_method: current_user yaptığınız noktaları düşünün).Küresel yardım işlevlerini laravel 5'te nasıl yapabilirim?

Her şey bir yardımcı klasörü oluşturmak ve buradaki işlevi eklemek için durumları okudum ve bu şekilde Helpers::functionName yapabilirsin Bunu yapmak için doğru yol bu mu?

Blade şablonlarında ve denetleyicilerinde kullanılabilecek yardımcı işlevler oluşturmanın "laravel yolu" nedir?

<?php 
function getDomesticCities() 
{ 
$result = \App\Package::where('type', '=', 'domestic') 
    ->groupBy('from_city') 
    ->get(['from_city']); 

return $result; 
} 

komutunu

php artisan make:provider HelperServiceProvider 
izleyerek yardımcı için bir servis sağlayıcı oluşturmak:
+0

Belki de bu yardımcı olacaktır: http://stackoverflow.com/questions/28290332/best-practices-for-custom-helpers-on-laravel-5 – Iamzozo

cevap

46

benim yardımcı bir örnek AnythingHelper.php uygulamanızı/Yardımcılar dizin adı yeni bir dosya oluşturun Yeni oluşturulan HelperServiceProvider.php kayıt fonksiyonunda
require_once app_path('Helpers/AnythingHelper.php'); 
.210

şimdi config/app.php bu servis sağlayıcı yüklemek ve global fonksiyonlar dosyası oluşturma başka etkili yolu besteci doğrudan özdevinimli onu etmektir

'App\Providers\HelperServiceProvider', 
+0

Bunu bıçakta nasıl kullanırsınız? Cephe kayıt olmanız gerekiyor mu? – MaXi32

+1

Hayır, sadece yukarıda belirtilen kod bunu yapar, blade dosyanızda {{yourHelperFunction ('param')}} –

+0

Keşke yardımcı işlevini blade'de Helper :: myHelperFunction ('param') ile çağırabilirdim. Daha güzel görünüyor. Bunu nasıl kaydedeceğinizi biliyor musunuz? – MaXi32

18

yapılır. Bestecin otomatik yükleme bölümü, otomatik olarak yüklenen bir files dizisini kabul eder. istediğiniz yere

  1. bu örnekte, biz app/Helpers içine oluşturmak için gidiyoruz, bir functions.php dosyası oluşturun.
  2. Fonksiyonlarınızı ekleyin fakat bir sınıf veya ad ekleyin yoktur.

    autoload bölümün içinde composer.json yılında
    <?php 
    
    function global_function_example($str) 
    { 
        return 'A Global Function with '. $str; 
    } 
    
  3. aşağıdaki satırı ekleyin: laravel 5 için

    "files": ["app/Helpers/functions.php"] 
    

:

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    }, 
    "files": ["app/Helpers/functions.php"] 
}, 
  1. Çalıştır composer dump-autoload

Tebrikler! Artık, Blade görünümleri dahil olmak üzere uygulamanızın herhangi bir bölümünü global_function_example('hello world')'a erişebilirsiniz.

Umarım bu birileri için yararlıdır!

+0

Birden fazla denetleyici dosyasında çağrılabilen genel bir işlev oluşturmam gerekiyor. Bu basit görünüyor ama 'besteci dump-autoload' komutunu çalıştırdığınızda ne olur? Yeni dosyalar oluşturuldu mu? Composer.json, gulpfile.js gibi dosyaları bile hiç kullanılmadıklarını düşündüğüm gibi sildim. – hijacker83

+0

Harika! “Composer dump-autoload” çalıştırıldığında, besteci önbelleğinin temizlenmesi benzer olur. Temel olarak, composer.json dosyasından yüklenmesi gereken sınıfları yeniden değerlendirir. İyi şanslar! –

+0

Verimli yöntem – NaveenDA