在日常使用中,我們經常會遇到需要更改使用者輸入的表單值的資料型別的情況。
例如資料表中有一個title
欄位並宣告為not null
,那麼我們則需要保證該欄位的值儲存到資料庫時的資料型別不能是null
,否則資料庫會報錯。在Dcat Admin中,我們通常可以使用以下方法轉換表單值的資料型別
$form->text('title')->saving(function ($value) {
// 強制轉化為string型別
return (string) $value;
});
這種用法是沒有問題的,但是當類似title
這樣需要轉換型別的欄位非常多的時候,我們的程式碼會變得雜亂,如
$form->text('title')->saving(function ($value) {
return (string) $value;
});
$form->text('first_name')->saving(function ($value) {
return (string) $value;
});
$form->text('last_name')->saving(function ($value) {
return (string) $value;
});
...
簡潔之道
那麼有沒有方法可以讓你的程式碼變得更簡潔呢?答案當然是有的,並且非常簡單,我們可以利用Laravel
的macro
功能來擴充套件這個功能。
開啟app/Admin/bootstrap.php
,寫入以下程式碼
// 擴充套件表單欄位方法
// 儲存為字串
Form\Field::macro('saveAsString', function () {
return $this->saving(function ($v) {
return (string) $v;
});
});
然後就可以在你的form
表單中這麼使用了
$form->text('title')->saveAsString();
$form->text('first_name')->saveAsString();
$form->text('last_name')->saveAsString();
現在程式碼就簡潔很多啦。
IDE自動補全
但是這個通過macro
擴充套件出來的方法,還有那麼一點點的不足,我們的編輯器沒辦法識別這個方法,沒有自動補全提示。所以下面我們可以通過一個小技巧,讓你的編輯器能識別這個通過macro
擴充套件出來的方法。
在你的專案根目錄中新建一個檔案.ide_helper.php
,然後開啟並寫入以下內容
<?php
namespace Dcat\Admin\Form
{
/**
* @method $this saveAsString()
*/
class Field
{}
}
然後你的編輯器就能識別這個方法了,是不是非常簡單。
結語
Laravel
的macro
是一個非常強大的功能,Dcat Admin內建的許多功能都支援了macro
操作,大家可以自行發掘出更多姿勢技巧。
Dcat Admin
Dcat Admin是一個基於laravel-admin二次開發而成的後臺系統構建工具,只需很少的程式碼即可快速構建出一個功能完善的高顏值後臺系統。內建豐富的後臺常用元件,開箱即用,讓開發者告別冗雜的HTML程式碼,對後端開發者非常友好。
線上演示站點 | LearnKu官方文件 | Github主頁(如果喜歡這個專案不妨點個star,感謝支援!)
本作品採用《CC 協議》,轉載必須註明作者和本文連結