Dcat Admin 教程 - 如何優雅地更改表單值的資料型別?

Jiangqh發表於2020-05-11

在日常使用中,我們經常會遇到需要更改使用者輸入的表單值的資料型別的情況。

例如資料表中有一個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;
});

...

簡潔之道

那麼有沒有方法可以讓你的程式碼變得更簡潔呢?答案當然是有的,並且非常簡單,我們可以利用Laravelmacro功能來擴充套件這個功能。

開啟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
    {}
}

然後你的編輯器就能識別這個方法了,是不是非常簡單。

結語

Laravelmacro是一個非常強大的功能,Dcat Admin內建的許多功能都支援了macro操作,大家可以自行發掘出更多姿勢技巧。

Dcat Admin

Dcat Admin是一個基於laravel-admin二次開發而成的後臺系統構建工具,只需很少的程式碼即可快速構建出一個功能完善的高顏值後臺系統。內建豐富的後臺常用元件,開箱即用,讓開發者告別冗雜的HTML程式碼,對後端開發者非常友好。

線上演示站點 | LearnKu官方文件 | Github主頁(如果喜歡這個專案不妨點個star,感謝支援!)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Jiangqh

相關文章