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
我們將取得到Administrator
, Paid 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中文網其他相關文章!

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

taskManagementsToolSareEssentialForefectiverMototeprojectManagementbyPrioritizingTaskSandTrackingProgress.1)USETOOLSLIKETRELLOANDASANATASANATOSETPRIORITIONTAGS.2)

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

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

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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