搜尋
首頁php框架Laravel聊聊Laravel怎麼使用枚舉

聊聊Laravel怎麼使用枚舉

Sep 21, 2022 am 10:33 AM
laravel

Laravel中怎麼使用枚舉?以下這篇文章為大家介紹一下在 Laravel 中使用枚舉的方法,希望對大家有幫助!

聊聊Laravel怎麼使用枚舉

我是enums的忠實粉絲最近,我在一家使用C#的公司工作,那裡廣泛使用enum,我已經習慣了在找不到它們的時候,能夠找到它們,並想念它們。

我將它們用於任何具有有限一組可能選項的事情,例如一周中的幾天、訂單的狀態,或者,如下面的範例中所示,使用者類型。

使用枚舉有幾個好處:

-減少因轉置或錯誤輸入數字而導致的錯誤。

-使將來改變價值觀變得容易。

-使程式碼更易於閱讀,這意味著不太可能有錯誤潛入其中。

-確保前向相容性使用枚舉時,如果將來有人更改與成員名稱對應的值,可以大大降低你的程式碼失敗幾率。

PHP 本身並不支援枚舉,但是使用類別中的常數相當容易實現等價的效果。此外,我還創建了一個名為 laravel-enum 的 Laravel 套件。 它允許你存取幫助函數,例如列出鍵和值,將描述附加到值上,以及驗證期望枚舉值的請求。

本指南逐步介紹了安裝的過程 Laravel package 包含用法和最佳實務的範例。

安裝套件

可以透過composer 在終端機中運送以下指令來安裝套件:

$ composer require bensampo/laravel-enum

如果你使用的是低於5.5的Laravel版本,你需要將服務提供者加入 config/app.php.

'BenSampo\Enum\EnumServiceProvider'

建立第一個枚舉

我們將為使用者類型建立一個枚舉在我們的範例應用程式中,使用者可以屬於以下三種使用者類型之一:管理員、付費成員、成員。

套件中包含用於建立枚舉的生成器,因此可以執行以下命令來建立名為UserType的枚舉該檔案將在「app/Enums/UserType.php」中建立

php artisan make:enum UserType

你將會在這個文件中看到一定數量的鷹架。在文件頂部附近,可能的選項清單被定義為常數。這些常數值儲存在資料庫中,因此我發現最好是使用整數,但是並沒有限制一定要使用整數,只要每一個值都是唯一就可以了。

本例中的選項看起來是這樣的:

const Administrator = 0;
const PaidMember = 1;
const Member = 2;

把值儲存在資料庫中

現在我們有了一個帶有一些可能性的枚舉,並且可以開始使用它。在遷移 user 表時, 可以新增以下內容。

$table->tinyInteger('type')->unsigned()->default(UserType::Member);

因為 null 不是列舉的選項,我們需要為它設定預設值。在這個例子中,有必要去假設預設的使用者將成為標準成員。

確保檔案的頂部包含此枚舉的 use 語句。

use App\Enums\UserType;

在操作中使用枚舉

由於我們現在的使用者模型具有類型的屬性,我們可以對它進行訪問,並與 enum 值進行比較。這就是列舉真正的好處,也是我為什麼如此喜歡他們。看一下下面的用法範例和可能替代的方法。

if ($user->type === UserType::PaidMember) {
    // 在这里只是做一些付费会员的事情.
}

如果我們不使用枚舉,可能會有類似以下的程式碼:

if ($user->type === 1) { // 这个1表示什么??
    // ...
}

if ($user->type === 'PaidMember') { // 这他妈咋么又是字符串 ?
    // ...
}

使用枚舉的第一個例子是最容易讀懂並且也是最不容易出錯的例子。如果我偶然輸入了UserType::Paidember (注意拼字錯誤),我會得到一個很好的錯誤提示,告訴我程式碼錯誤了(類別中不存在這個常數值),而不是像前兩個範例那樣默默的失敗。 (只是判斷不符合條件,你還需要根據當前的條件語句去具體的查看相關代碼?)

#顯示枚舉

在應用的某些介面,我們可能希望向使用者顯示他們所屬的使用者類型。如果只是簡單的輸出從資料庫所取得的整數值,顯然達不到我們想要的結果。相反,可使用每個枚舉類別所繼承基底類別的  getDescription 方法。

在blade 範本上的操作如下:

<p>{{ \App\Enums\UserType::getDescription($user->type) }}</p>

輸出結果Administrator(管理員),PaidMember(付費會員) 、 Member(會員)中的一個。

有時候關鍵字名稱是複合字(就像 PaidMember),我們想要展示和鍵名不同的東西。我們可以像下面這樣覆蓋掉目前枚舉的描述。在 app/Enums/UserType.php:

public static function getDescription(int $value): string
{
    switch ($value) {
        case self::PaidMember:
            return 'Paid member';
        break;
        default:
            return self::getKey($value);
    }
}

現在當我們呼叫 getDescription 我們將取得到AdministratorPaid member  or Member.

驗證方式

透過使用者的輸入,對枚舉值進行修改時,最好能確保我們僅接受有效的值。我們可以使用套件中的驗證規則。

当以表格展示枚举的时候,我经常把他们显示为 HTML select 元素。这样虽仍然可以被恶意修改,但是避免了将错误的值传递给服务器的情况。

继续我们的用户使用示例,让我们在用户控制器中处理修改的值:

public function store(Request $request)
{
    $this->validate($request, [
        'type' => ['required', new EnumValue(UserType::class)],
    ]);

    // 保存用户等等...
}

记住要同时包含枚举的 use 语句和 EnumValue 的规则。

use App\Enums\UserType;
use BenSampo\Enum\Rules\EnumValue;

结束

当然这并不是枚举所能完成的全部范围。但是它覆盖了90%的用例。

值得一看的列表 枚举类上的方法的完整列表 以查看您还能实现什么。

【相关推荐:laravel视频教程

以上是聊聊Laravel怎麼使用枚舉的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
將JavaScript框架(React,Vue,Angular)與Laravel Backend集成將JavaScript框架(React,Vue,Angular)與Laravel Backend集成May 03, 2025 am 12:20 AM

React,vue,andangularCanBeintegratedWithLaravelByFollowingSpecificetUpSteps.1)forreact:installReactusingLaravelui,setUpComponentsInapp.js.js.js.js.2)forvue:uselaravel'sbuilt'sbuilt'sbuilt invuesupport,configureinapp.js.3)forangular forangular setuplare setulare sereptery sereptry and parkuly sereftery secparroughtery secparroughtery secparroughtery

任務管理工具:遠程項目的優先級和跟踪進度任務管理工具:遠程項目的優先級和跟踪進度May 02, 2025 am 12:25 AM

taskManagementsToolSareEssentialForefectiverMototeprojectManagementbyPrioritizingTaskSandTrackingProgress.1)USETOOLSLIKETRELLOANDASANATASANATOSETPRIORITIONTAGS.2)

最新的Laravel版本如何提高性能?最新的Laravel版本如何提高性能?May 02, 2025 am 12:24 AM

Laravel10enhancesPerformancEthroughSeveralKeyKeyFeatures.1)itintroducesquereBuilderCachingTordorcachingTordOuctedSataBaseload.2)itoptimiesseloizeseloquentmodelloAdingwithlazyproxies.3)

全棧Laravel應用程序的部署策略全棧Laravel應用程序的部署策略May 02, 2025 am 12:22 AM

最佳的全棧Laravel應用部署策略包括:1.零停機部署,2.藍綠部署,3.持續部署,4.金絲雀發布。 1.零停機部署使用Envoy或Deployer自動化部署過程,確保應用在更新時保持可用。 2.藍綠部署通過維護兩個環境實現無停機部署,並允許快速回滾。 3.持續部署通過GitHubActions或GitLabCI/CD自動化整個部署流程。 4.金絲雀發布通過Nginx配置,將新版本逐步推廣給用戶,確保性能優化和快速回滾。

擴展全堆棧Laravel應用程序:最佳實踐和技術擴展全堆棧Laravel應用程序:最佳實踐和技術May 02, 2025 am 12:22 AM

toscalealaravelApplication有效,焦點databaseSharding,緩存,負載平衡和microservices.1)實現DataBasEshardingTodistaCripedataCrossmultipledataBasesForimProvesforimPrevperformance.2)uselaravel'scachingsystemystemystemystemywithredsormememememememcachedtebachedtebab

沉默的鬥爭:克服分佈式團隊中的溝通障礙沉默的鬥爭:克服分佈式團隊中的溝通障礙May 02, 2025 am 12:20 AM

doovercomecommunicationbarriersIndistributedTeams,使用:1)VideoCallSforface-to-Faceinteraction,2)setClearresponsEtimepections,3)chooseappropropropraproproprapropropriatecommunicationTools,4)CreatseateAteAteAteamCommunicationGuide和5)建立PemersonalBoundariestAriestOpeopReventBreventBurniationBurnication.the

使用Laravel Blade在全棧項目中進行前端模板使用Laravel Blade在全棧項目中進行前端模板May 01, 2025 am 12:24 AM

laravelbladeenhancesfrontendtemplatinginflatinginflationll-stackprojectsbyferingCleanSyntaxandaxandpoperfelfulfeatures.1)itallowsforeasyvariableasyvariabledisplayandControlstructures.2)bladesuportsuportsuportscreatingingingingingingingingingingangingandredreingscomponents components components components,aidinginmanagingcomplexuis.3)

使用Laravel:實用教程構建全堆棧應用程序使用Laravel:實用教程構建全堆棧應用程序May 01, 2025 am 12:23 AM

laravelisidealforll-stackapplicationsduetoitselegantsyntax,complastissionecosystem和perperatedfulfeatures.1)useeloquentormforintuivelbackenddatamanipulation,butavoidn 1queryissues.2)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),