站長資訊網
        最全最豐富的資訊網站

        詳解怎么在Laravel中創建自己的PHP幫助函數

        下面由laravel教程欄目給大家介紹在Laravel中創建自己的PHP幫助函數,希望對需要的朋友有所幫助!

        在Laravel中創建自己的PHP幫助函數

        Laravel 為我們提供了許多內置的幫助函數,你可以在應用程序中的任何位置調用它。它們使你可以方便地處理數組和對象,路徑,字符串,URL和其他類型的工作流。

        盡管在 Laravel 核心中定義了許多幫助函數,但你可以在 Laravel 中定義自己的幫助函數以避免重復相同的代碼。它確保你的應用程序有更好的可維護性。

        我們來看看如何創建自己的定制 Laravel 幫助函數

        Laravel 中的幫助函數

        Laravel 中有許多內置的幫助程序可供你的應用程序使用。它們根據它們提供的功能類型進行分組。這是一個完整的內置 Laravel 幫助文件。

        數組和對象

        在這個組中,助手提供了處理數組和對象的能力。 該組包含用于添加兩個數組的輔助函數,將多維數組折疊成單個數組,返回數組的第一個元素,檢查數組中是否存在給定的項目或項目,并執行許多其他類型的操作。

        路徑

        這組helper返回Laravel應用程序中不同目錄的絕對路徑,例如 app,config,public,resource,storage和你的應用程序的基本路徑。

        字符串

        該組中的助手使用字符串操作。 你可以將字符串轉換為駱駝大小寫,找到該類的基本名稱,運行 htmlspecialchars,將文本轉換為kebab大小寫,將文本轉換為大小寫,并執行許多其他類型的字符串操作。

        URL

        助手的URLs組與生成URL一起工作。你可以為控制器操作生成URL,命名為route,以及指定路徑的完全限定URL。

        雜項

        這類幫助程序包含處理頁面狀態,服務容器,認證,緩存等功能。

        在Laravel中創建幫助文件

        在本節中,我們將通過創建Laravel幫助程序文件,該文件可以在Laravel應用程序中全局使用。 你可以組織你的幫助程序文件的位置,但是,我更愿意將我的Laravel項目幫助程序文件保存在 app/Helpers/Helper.php 中。 在本教程中,我們將在我想要的位置創建一個幫助文件。

        創建一個幫助文件

        你可以將你的幫助程序文件放在你的Laravel應用程序的任何位置,將它放在你的應用程序目錄下是標準的。
        讓我們在app下創建一個 Helpers 目錄并創建一個 Helper.php 文件。這些是該文件的以下內容。

        <?php  if (!function_exists('human_file_size')) {     /**      * Returns a human readable file size      *      * @param integer $bytes      * Bytes contains the size of the bytes to convert      *      * @param integer $decimals      * Number of decimal places to be returned      *      * @return string a string in human readable format      *      * */     function human_file_size($bytes, $decimals = 2)     {         $sz = 'BKMGTPE';         $factor = (int)floor((strlen($bytes) - 1) / 3);         return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $sz[$factor];      } }  if (!function_exists('in_arrayi')) {      /**      * Checks if a value exists in an array in a case-insensitive manner      *      * @param mixed $needle      * The searched value      *      * @param $haystack      * The array      *      * @param bool $strict [optional]      * If set to true type of needle will also be matched      *      * @return bool true if needle is found in the array,      * false otherwise      */     function in_arrayi($needle, $haystack, $strict = false)     {         return in_array(strtolower($needle), array_map('strtolower', $haystack), $strict);     } }

        如果你正在使用一個類并且它的方法是你的助手,你可以用命名空間聲明來啟動這個文件。

        namespace AppHelpers;

        如果你不使用命名空間聲明,則這些函數將變為全局可用,你甚至可以在不指定名稱空間的情況下使用它們。 所有Laravel內置的幫助函數都是在沒有命名空間的情況下定義的。 此外,助手類也將在全局范圍內提供。 因此,如果你想在不指定命名空間的情況下使用助手,只需刪除這一行。

        定義這些函數時有一些注意事項。所有的Laravel助手文件函數都會被檢查以避免函數定義沖突。

        if (!function_exists('human_file_size')) {     function human_file_size($bytes, $decimals = 2)     {         // ...     } }

        如果跳過此檢查,則每次重新定義具有相同定義的函數時都會發生沖突。你可以使用這個檢查,或者你也可以用你的函數名稱作為前綴來避免沖突。

        使用幫助文件

        現在,就我們的幫助文件而言,就是這樣。讓我們看看如何在Laravel應用程序中使用助手文件。

        • 你可以使用 composer 自動加載助手文件。然后,你可以在應用程序的任何位置使用這些功能。
        • 你也可以使用Laravel服務提供者注冊此文件。 Laravel會將其與其他依賴關系一起加載。
        • 你也可以使用一個包含所有這些功能的軟件包。

        讓我們看看如何使用所有這些方法。

        通過Composer自動加載

        第一個非常簡單直接。 只需轉到位于Laravel項目中的 composer.json 文件,你將看到自動加載 key。 Composer 有一個key files(你想自動加載的文件路徑數組),你可以在自動 `autoload 中使用它。 如:

        "autoload": {     "files": [         "app/Helpers/Helper.php"     ],     "classmap": [         "database/seeds",         "database/factories"     ],     "psr-4": {         "App\": "app/"     } },

        更改composer.json文件并向文件數組添加新路徑后,需要重新生成自動加載文件。只需從Laravel項目目錄中的終端運行此命令即可。

        composer dump-autoload

        現在,你的幫助程序文件將自動加載到你的Laravel項目中。

        通過服務提供者加載

        讓我們來看看如何使用服務提供者來自動加載助手文件。轉至應用程序根目錄中的命令行并運行以下命令以創建新的服務提供者。

        php artisan make:provider HelperServiceProvider

        將會提示運行結果

        Provider created successfully.

        一旦服務提供者成功創建,打開該文件。在注冊方法中添加你的助手文件。

        public function register() {     $file = app_path('Helpers/Helper.php');     if (file_exists($file)) {         require_once($file);     } }

        在注冊方法中,我們包含了我們的依賴關系。 在大型項目中,你可能在目錄中有多個幫助程序文件,并且你想要全部這些文件。 你可以更改注冊方法,如下所示,你的服務提供商將加載Helpers目錄中的所有文件。

        public function register() {     foreach (glob(app_path() . '/Helpers/*.php') as $file) {         require_once($file);     } }

        它將需要 app/Helpers 目錄中的所有文件。
        現在我們的服務提供者已經完成,我們需要注冊我們的服務提供者,所以,Laravel會在引導期間加載它。 為此,請轉至 config/app.php 并在結尾處的 providers 數組中添加以下行。

        AppProvidersHelperServiceProvider::class,

        如果你的幫助文件涉及到一個擁有這些幫助方法的類,并且你已經指定了命名空間,那么你可以通過定義一個別名來毫不費力地使用它們。 您可以通過在 config/app.php 文件中的別名數組末尾添加以下內容輕松完成此操作。

        'Helper' => AppHelpersHelper::class,

        通過將這添加到別名數組中,你將能夠使用Helper關鍵字調用助手。這就是為服務提供者創建你的幫手。

        使用第三方包加載

        你也可以使用第三方package: Laravel helpers package(https://github.com/browner12/helpers/)。你可以通過在控制臺中從你的應用程序的根目錄運行此命令來通過編寫器安裝它。

        composer require browner12/helpers

        config/app.php 中的 providers 數組中添加以下行

        browner12helpersHelperServiceProvider::class,

        如果你正在使用Laravel的自動包發現功能,則可以跳過此步驟。 完成必要的步驟之后,你可以使用此命令創建助手文件。

        php artisan make:helper Helper

        它將在 AppHelpers 中創建一個 Helper.php 文件,你可以輕松添加所有幫助程序功能。

        Helper 的具體使用

        現在我們的函數在Helper文件中定義,沒有定義名稱空間,我們可以很容易地使用它們。 只需在 routes/web.php 中找到你的路由文件,并將此功能用于首頁。 例如,這是完整的 routes/web.php 文件:

        <?php  Route::get('/', function () {     return human_file_size(1024*1024); });

        它將簡單地返回作為參數傳遞的字節數的可讀大小。你可以從任何地方控制器或視圖調用這些函數。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 91精品无码久久久久久五月天| HEYZO无码综合国产精品| 国产精品香港三级国产AV| 国内精品人妻无码久久久影院| 热re99久久精品国99热| 国产乱码精品一区二区三区中文 | 欧美精品国产一区二区| 99久久综合国产精品二区| 青青草精品视频| 免费短视频软件精品一区二区| 一本色道久久88—综合亚洲精品| 牛牛在线精品观看免费正| 亚洲精品黄色视频在线观看免费资源| 欧美精品欧美人与动人物牲交| 精品国产91久久久久久久 | 日韩精品无码一区二区三区免费 | 伊人久久大香线蕉精品不卡| 国内精品久久久久影院一蜜桃 | 99久久99久久精品国产片果冻| 久久久精品国产Sm最大网站| 精品无码一区二区三区爱欲| 四虎精品成人免费永久| 三级高清精品国产| 国产精品扒开腿做爽爽爽视频| 精品亚洲成AV人在线观看| 欧美精品亚洲精品日韩专区va| 日韩精品一区二区三区影院| 99re热这里只有精品视频中文字幕| 精品久久久久久无码中文字幕| 97人妻无码一区二区精品免费| 久久久久久久亚洲精品| 亚洲国产精品自在线一区二区| 午夜不卡久久精品无码免费 | 精品免费视在线观看| 亚洲国产综合精品一区在线播放 | 少妇精品久久久一区二区三区| 国产成人精品福利网站在线观看| 日韩精品久久久久久久电影蜜臀| 乱人伦人妻精品一区二区| 99久久精品免费看国产免费| 国产精品久久久久无码av|