2015-09-06 63 views
20

如果我想爲某些oauth東西做一個currentUser()函數,我正在做我可以在視圖或控制器中使用它的地方(想想你在應用程序控制器中做helper_method: current_user的地方)。如何在laravel 5中創建全局幫助函數?

我讀的所有狀態創建一個助手文件夾,並在那裏添加功能,然後你可以這樣做Helpers::functionName這是正確的方法嗎?

創建可用於刀片模板和控制器的輔助函數的「laravel方法」是什麼?

+0

也許這將有助於:http://stackoverflow.com/questions/28290332/best-practices-for-custom-helpers-on-laravel-5 – Iamzozo

回答

46

創建您的應用程序/傭工目錄名的新文件,它AnythingHelper.php 幫助我的一個例子是:

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

return $result; 
} 

通過以下命令

php artisan make:provider HelperServiceProvider 
爲您的幫助服務提供商

在您新近生成的HelperServiceProvider.php的註冊功能中添加以下代碼

require_once app_path('Helpers/AnythingHelper.php'); 

現在在你的配置/ app.php加載該服務提供商和你做

'App\Providers\HelperServiceProvider', 
+0

你如何在刀片中使用它。你需要註冊外觀嗎? – MaXi32

+1

不,只有上面提到的代碼在你的刀片文件中做{{yourHelperFunction('param')}} –

+0

我希望我可以在刀片中使用Helper :: myHelperFunction('param')調用輔助函數。它看起來更好。你知道如何註冊嗎? – MaXi32

18

創建全局函數文件的另一種有效的方法是直接從作曲家自動加載它。作曲家的自動加載部分接受自動加載的files數組。

  1. 創建一個functions.php文件你喜歡的地方,在這個例子中,我們要創建它裏面app/Helpers

  2. 添加您的功能,但這樣做添加一個類或命名空間。

    <?php 
    
    function global_function_example($str) 
    { 
        return 'A Global Function with '. $str; 
    } 
    
  3. composer.jsonautoload部內添加下列行:

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

對於Laravel 5:

"autoload": { 
    "classmap": [ 
     "database" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    }, 
    "files": ["app/Helpers/functions.php"] 
}, 
  • 運行composer dump-autoload
  • 恭喜!您現在可以從您的應用程序的任何部分訪問global_function_example('hello world'),包括刀片視圖。

    我希望這對某人有用!

    +0

    我還需要創建一個全局函數,可以在多個控制器文件中調用該函數。這看起來很簡單,但運行命令'composer dump-autoload'時會發生什麼?新文件是否已創建?我甚至刪除了像composer.json,gulpfile.js這樣的文件,因爲我根本不認爲它們已被使用。 – hijacker83

    +0

    太棒了!運行'composer dump-autoload'將與清理作曲者緩存類似。基本上,它重新評估需要從composer.json文件加載的類。祝你好運! –

    +0

    高效的方法 – NaveenDA