注:本文是翻譯Freek Van der Herten寫的關於Collection
除錯技巧,,讀完以後很實用,分享給大家.閱讀過程中,翻譯有錯誤的希望大家指正,thx..
原文連結: https://murze.be/2016/06/debu…
最近我一直在使用Laravel的collection,如果你還不瞭解collection,我簡單說下:一個collection(集合)就是一個‘功能強大’的陣列,有很多強大處理其內部資料的函式.但是唯一讓我頭疼的地方是如何除錯collection的鏈式操作,以下是我改善過的業務處理.
使用Collection類你可以使用鏈式的方式,通過操作函式來處理資料,舉個例子如下(為了讓程式碼更簡短,我把函式體中的具體實現給省略了)
collect($items)
->filter(function() {
...
})
->unique(function() {
...
})
->map(function() {
...
})
->sortBy(function() {
...
});
想象一下如果你需要除錯這段程式碼,你想要獲取map函式的返回值,你會怎麼做?那麼你可能會用dd()把這`整個操作`包起來,得出返回值.
dd(collect($items)
->filter(function() {
...
})
->unique(function() {
...
})
->map(function() {
...
}))
->sortBy(function() {
...
});
的確,這樣足夠了,整個操作的返回值也能列印出來,但是還是有點瑣碎,你必須要要在每次測試操作的開始和結尾加點東西(開頭:`dd(`,結尾:`)`),我覺得這樣可讀性上不太好.並且移動dd語句測試也是很麻煩,結尾的括號又特別容易被忽略,so,雖然我看似解決了這個問題,但是我敢保證如果像這樣除錯的話,你很快就覺得很繁瑣.ok,其實是有解決方案的.
laravel的Collection類是Macroable(暫且譯為:可擴充套件的),這意味著我們可以在執行時新增相應的函式.為了提高我們除錯流程,我們可以建立簡單的dd macro:
Collection::macro(`dd`, function () {
dd($this);
});
為了能在專案中使用這個函式,需要將以上程式碼放到服務提供者中.ok,如下,看下這個Blender–我們的laravel模板,舉個例子
使用macro debugging除錯Collection,對於我們來說變得很簡單了.ok,我們來看看它如何使用.
collect($items)
->filter(function() {
...
})
->unique(function() {
...
})
->map(function() {
...
})
->dd()
->sortBy(function() {
...
});