iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
2
Modern Web

Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!系列 第 28

[Day 28] Laravel 協助開發的輔助工具!聊 Laravel Helpers

基本的開發功能差不多都講解完了,有關測試的部分也都說的差不多了。

今天我們來聊一個 Laravel 爭議頗多的設計:Helpers

什麼是 Helpers

為了協助開發,Laravel 提供了一系列的函式,將常常做的事情幫開發者做好了。

以下將這些協助的事情分成三類來概略的介紹

全域函式

比方說我們前面介紹過的 decrypt()encrypt() 就是 Laravel Helpers 全域函式的一個例子

除了這兩個例子以外,我們這邊再挑選三個例子做介紹。

dd()

dd() 是開發過程中最常用的函式之一,可以印出送入的參數,並且暫停程式。

我們可以用測試路徑看看這個函式的效果

Route::get('/test', function(){
    dd('輸入一');
    return '輸入二';
});

連接 http://127.0.0.1/test 我們就可以看到「輸入一」這個字串,但是不會看到「輸入二」

dump()

如果只是想看到輸入,但是不中斷整個程式的運作,我們可以改用 dump() 這個函式

Route::get('/test', function(){
    dump('輸入一');
    return '輸入二';
});

這樣的話,程式還是會將「輸入一」顯示出來,但是不會中斷,所以我們還是可以看到「輸入二」產生

route()

route() 可以用來將路由名稱轉換成網址

Route::get('/test', function(){
    return route('posts.index');
});

之後連線到 http://127.0.0.1/test ,會顯示 http://127.0.0.1/posts

Arr

有關陣列操作,Laravel 也提供了不少協助的函式。

這邊選三個例子進行介紹:

Arr::get()

Arr::get() 可以透過

Route::get('/test', function(){
    $array = ['products' => ['desk' => ['price' => 100]]];
    dd(Arr::get($array, 'products.desk.price'));
});

連接 http://127.0.0.1/test 可以看到 100

有的讀者可能會感覺到,這個函式取值的方式,跟路由設定值的方式很相似。事實上這也是 Laravel 開發路由時會用到的函式之一。

Arr::first()

這個函式可以取出陣列第一個值,比較特殊的是,他可以接收一個回傳布林值的匿名函式,用來過濾不符合的值。

use Illuminate\Support\Arr;
Route::get('/test', function(){
    $array = [100, 200, 300];

    $first = Arr::first($array, function ($value, $key) {
        return $value >= 150;
    });
    
    dd($first);
});

連接 http://127.0.0.1/test 可以看到 200

Arr::wrap()

這個函式基本上,就是把收到的東西包裝成陣列。

如果收到 null,就回傳空陣列。

如果收到陣列,就不加以處理。

use Illuminate\Support\Arr;
Route::get('/test', function(){
    $string = 'Laravel';
    dd(Arr::wrap($string));
});

連接 http://127.0.0.1/test 可以看到

array:1 [▼
  0 => "Laravel"
]

Str

和字串相關的函式,相信有的讀者可能會想到,在處理語系時使用的 __()trans() 就是個例子。

另外,和陣列類似,Laravel 還用了 Str 物件來協助字串處理。

下面一樣選三個例子進行介紹:

e()

e() 用來處理 HTML 編碼,可以處理純字串或者 view 物件等等。

可以用我們剛剛學過的 dd() ,在測試路徑上看看結果

Route::get('/test', function(){
    $value = e('<html>foo</html>');
    dd($value);
});

連接 http://127.0.0.1/test 可以看到 <html>foo</html>

Str::contains()

Str::contains() 這個函式用來比對兩個字串,看看前面的字串是否包含後面的字串。

use Illuminate\Support\Str;
Route::get('/test', function(){
    $isContain = Str::contains('This is my name', 'my');
    dd($isContain);
});

連接 http://127.0.0.1/test 可以看到 true

Str::plural()

這個函式可以讀取一個英文名詞,將其轉化成該名詞的複數型態

use Illuminate\Support\Str;
Route::get('/test', function(){
    dd(Str::plural('post'));
});

連接 http://127.0.0.1/test 我們會看到 posts

可能有讀者發現了,這個函式就是用來協助 Laravel 在找 Eloquent Model 對應的資料表名稱時,所會使用到的函式之一。


以上就是所有的介紹。因為 Laravel Helpers 的功能實在太多,所以這邊只簡介部分的功能。

要看到全部的功能,可以到 https://laravel.com/docs/6.x/helpers 查閱。

為什麼有人討厭 Helpers

有人喜歡的東西,自然就會有人討厭。有的人認為 Laravel 的這些 helpers 把工程師寵壞了,這樣的設計讓很多人甚至無法分清哪些是 PHP 原生的函式,哪些又是 Laravel 所提供的函式。甚至有人每次看到新人遇到不是 Laravel 的 PHP 專案,然後找不到 first() 之類的函式時,會有一種無奈的感覺。

不過筆者認為,工具方便性提高,確實可能導致使用者在開發過程中沒有掌握狀況就開發。不過與其抱怨工具太過方便,不如想辦法提升開發者對語言和框架的熟悉度與認知,知道哪些功能是語言本身提供的,哪些又是框架自帶的,框架自帶的功能又是怎麼實作。

這樣,才能同時兼顧開發速率跟工程師的知識面,既可以在有框架的環境下快速開發,又可以在沒有框架的狀況下減少開發遇到的問題。


小小總結今天所學到的東西。

今天我們學到 Laravel 提供的很多函式,特別是針對字串處理和陣列處理,提供了很多工具進行操作。

希望今天大家有收穫,我們明天見!


上一篇
[Day 27] 多國語系的處理!聊 Laravel Localization
下一篇
[Day 29] 最後一次介紹測試!談 Laravel Dusk 和其他官方套件
系列文
Laravel 6.0 初體驗!怎麼用最新的 laravel 架網站!30

尚未有邦友留言

立即登入留言