2017-04-02 25 views
11

Tôi có một số lớp trợ giúp trong app/Helpers. Làm cách nào để tải các lớp này bằng cách sử dụng service provider để sử dụng chúng trong các mẫu lưỡi dao?Các lớp trợ giúp tùy chỉnh trong Laravel 5.4

ví dụ: Nếu tôi có một lớp CustomHelper có chứa một phương pháp fooBar():

<?php 

nampespace App\Helpers; 

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

Tôi muốn để có thể làm điều gì đó như thế này trong các mẫu lưỡi của tôi:

{{ fooBar() }} 

thay vì làm điều này:

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

PS: @ andrew-brown's answer in Best practices for custom helpers on Laravel 5 deals wi các tệp không phải lớp. Nó sẽ là tốt đẹp để có một lớp học dựa trên giải pháp để các chức năng trợ giúp có thể được tổ chức giữa các lớp học.

+0

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

+0

cũng http://stackoverflow.com/a/32772686/ 2359679 – hassan

+0

Bạn muốn triển khai giải pháp dựa trên lớp nhưng sử dụng nó như một hàm toàn cầu? Đừng nghĩ rằng điều đó có thể xảy ra ở bất kỳ ngôn ngữ nào, hãy để một mình PHP hoặc laravel – Paras

Trả lời

27

Tôi không nghĩ rằng bạn chỉ có thể sử dụng chức năng khi bạn có mã trong lớp học của mình. Vâng, bạn có thể thử với mở rộng Blade nhưng nó quá nhiều.

Những gì bạn cần làm là tạo ra một tập tin thêm, ví dụ app\Helpers\helpers.php và trong hồ sơ của bạn composer.json đặt:

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    }, 
    "files": ["app/Helpers/helpers.php"] // <- this line was added 
}, 

tạo app/Helpers/helpers.php tập tin và chạy

composer dump-autoload 

Bây giờ trong file app/Helpers/helpers.php của bạn bạn có thể thêm các chức năng tùy chỉnh đó, ví dụ như sau:

if (! function_exists('fooBar')) { 
    function fooBar() 
    { 
     return \App\Helpers\CustomHelper::fooBar(); 
    } 
} 

để bạn xác định các chức năng toàn cục nhưng trên thực tế, tất cả các hàm này có thể sử dụng các phương thức công khai cụ thể từ một số lớp.

Bằng cách này là chính xác những gì Laravel làm cho những người giúp đỡ riêng của mình ví dụ:

if (! function_exists('array_add')) { 
    function array_add($array, $key, $value) 
    { 
     return Arr::add($array, $key, $value); 
    } 
} 

như bạn thấy array_add chỉ ngắn hơn (hoặc có thể ít tiết) cách viết Arr::add

Các vấn đề liên quan