分享幾個我最喜愛的 Laravel 輔助函數(shù)

下面是我整理的在平常會經(jīng)常用到的一些不錯的輔助方法。文中方法大都基于 Laravel7 以及更早的版本。(如果遇到問題,請先檢查是否是版本兼容問題)

Str::limit()

我們的第一個輔助函數(shù)?獲取一個字符串并用一個設(shè)定的字符長度限制截斷它?。它有兩個必須參數(shù):你想截斷的字符串,以及返回的被截斷的字符串的字符長度限制。

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20);

// The quick brown fox ...

你也可以傳入第三個可選參數(shù)來控制返回的字符串后顯示什么。

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, '[...]');

// The quick brown fox [...]

我發(fā)現(xiàn)這用于把一大段文本縮短為摘要或文章列表的帖子預覽是完美的。

head()

這個功能超贊。 一個簡單的方法通常由幾個嵌套的原始 PHP 函數(shù)組成,head () 會返回數(shù)組的第一個元素。 由于其全局性和無處不在的性質(zhì),我已經(jīng)在許多不同的應用程序中使用了它。

$array = [100, 200, 300];

$first = head($array);

// 100

想要反著來嗎? 使用?last?方法可以獲取數(shù)組的最后一個元素。

$array = [100, 200, 300];

$last = last($array);

// 300

這是關(guān)于使用 head 和 last 方法的最佳方法,因為它們根本不影響原始數(shù)組。

Str::between()

顧名思義, Str::between () 會?返回字符串中的內(nèi)容。如果沒有找到指定字符串,返回?null?。

use Illuminate\Support\Str;

$slice = Str::between('My name is Inigo Montoya.', 'My name is ', '.');

// 'Inigo Montoya'

我喜歡用這種方式從 () 或 [] 之間獲取信息、返回 url 中的特定部分、甚至是從 html 標簽中解析數(shù)據(jù)。

blank()

它 和 empty() 差不多,但是更好用。它根據(jù)你傳入的參數(shù)是否包含實際數(shù)據(jù),來返回一個布爾值。

// all of these return true

blank('');

blank('? ');

blank(null);

blank(collect());

// all of these return false

blank(true);

blank(false);

blank(0);

這個輔助函數(shù)在結(jié)合表單驗證、除去 API 中沒有規(guī)范輸入的數(shù)據(jù)時,特別有用。

它比?empty(trim())?更好用。

Str::contains()

我們期待已久的輔助函數(shù),?確定一個字符串中是否包含另一個字符串. 這個問題在?StackOverflow?和其他編程論壇上已經(jīng)被問過很多次了,因為目前在普通 PHP 程序中只能使用?strpos.

use Illuminate\Support\Str;

$contains = Str::contains('My name is Inigo Montoya.', 'Inigo');

// true

$contains = Str::contains('My name is Inigo Montoya.', 'Andrew');

// false

隨著最近的 rfc 的批準,PHP 將很快擁有自己的 str_contains 方法,這將使該方法過時。不過在此之前,它是 Laravel 中最有用的輔助函數(shù)之一。

Arr::pluck()

該方法可以說是我在本文中列出的更強大的方法之一,Arr::pluck?遍歷多維數(shù)組并檢索給定鍵的所有值

讓我們來看一個簡單的例子:

use Illuminate\Support\Arr;

$array = [

? ? ['website' => ['id' => 1, 'url' => 'reddit.com']],

? ? ['website' => ['id' => 2, 'url' => 'twitter.com']],

? ? ['website' => ['id' => 3, 'url' => 'dev.to']],

];

$names = Arr::pluck($array, 'website.url');

// ['reddit.com', 'twitter.com', 'dev.to']

傳入一個數(shù)組和一個點符號字符串來確定我們想要的鍵值,然后遍歷多維數(shù)組,并將指定鍵所對應值的一維數(shù)組返回給我們。

我在返回的 API 數(shù)據(jù)中多次使用過該方法(當我覺得不需要使用整個的集合時)。它使獲得 ID,名稱或其他屬性的數(shù)組變得非常容易,而無需創(chuàng)建整個 foreach 循環(huán)。

collect()

一旦發(fā)現(xiàn)集合有關(guān)的信息,我就不會停止使用它們。 這可能是我發(fā)現(xiàn)自己最常使用的助手函數(shù),它可以讓您?將數(shù)組轉(zhuǎn)換為集合。

為什么這很重要? 因為集合帶有大量的便捷方法,您可以將它們組合在一起用最簡單的閉包參數(shù)對數(shù)組執(zhí)行各種過濾,排序和修改等操作。 沒有 foreach 循環(huán),沒有中間變量,只是干凈的代碼。

看看這個簡單的例子:

$collection = collect(['Keys', 'Krates']);

return $collection->map(function ($value) {

? ? return Str::upper($value);

});

// ['KEYS', 'KRATES']

return $collection->filter(function ($value) {

? ? return strlen($value) > 4;

});

// ['Krates']

老實說,這只是集合的冰山一角。 我在項目中都使用了它們,尤其是當我要處理不是來自數(shù)據(jù)庫模型的龐大而復雜的數(shù)據(jù)集時。 CSV 數(shù)據(jù),外部 API 請求和目錄結(jié)構(gòu)都可以從放入集合中使用。

這就是我現(xiàn)在所了解的!


更多學習內(nèi)容請訪問:

騰訊T3-T4標準精品PHP架構(gòu)師教程目錄大全,只要你看完保證薪資上升一個臺階(持續(xù)更新)?

以上內(nèi)容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業(yè)務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構(gòu)、高可擴展、高性能、高并發(fā)、服務器性能調(diào)優(yōu)、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優(yōu)化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容