Heim > Artikel > PHP-Framework > Lassen Sie uns über die Verwendung von Aufzählungen in Laravel sprechen
Wie verwende ich Aufzählungen in Laravel? Der folgende Artikel stellt Ihnen vor, wie Sie Aufzählungen in Laravel verwenden. Ich hoffe, er wird Ihnen hilfreich sein!
Ich bin ein großer Fan von Aufzählungen, die ich in einem Unternehmen arbeite, das C# verwendet, wo Aufzählungen häufig verwendet werden, und ich habe mich daran gewöhnt, sie zu finden und zu übersehen, wenn ich es nicht kann finde sie.
Ich verwende sie für alles, was eine begrenzte Anzahl möglicher Optionen hat, wie zum Beispiel den Wochentag, den Status einer Bestellung oder, wie im Beispiel unten, den Benutzertyp.
Die Verwendung von Aufzählungen hat mehrere Vorteile:
– Reduziert Fehler, die durch Vertauschen oder Tippfehler von Zahlen entstehen.
– Erleichtert das zukünftige Ändern von Werten.
– Macht den Code leichter lesbar, was bedeutet, dass die Wahrscheinlichkeit, dass sich Fehler einschleichen, geringer ist.
- Sicherstellung der Vorwärtskompatibilität Durch die Verwendung von Aufzählungen können Sie die Wahrscheinlichkeit, dass Ihr Code fehlschlägt, erheblich reduzieren, wenn jemand in Zukunft den dem Mitgliedsnamen entsprechenden Wert ändert.
PHP selbst unterstützt keine Aufzählungen, aber es ist recht einfach, mit Konstanten in Klassen äquivalente Effekte zu erzielen. Zusätzlich habe ich ein Laravel-Paket namens laravel-enum erstellt. Es ermöglicht Ihnen den Zugriff auf Hilfsfunktionen wie das Auflisten von Schlüsseln und Werten, das Anhängen von Beschreibungen an Werte und das Validieren von Anforderungen, die Aufzählungswerte erwarten.
Diese Anleitung führt Sie durch den Prozess der Installation eines Laravel-Pakets, einschließlich Anwendungsbeispielen und Best Practices.
Sie können das Paket installieren, indem Sie den folgenden Befehl im Terminal über Composer ausführen:
$ composer require bensampo/laravel-enum
Wenn Sie eine Laravel-Version unter 5.5 verwenden, müssen Sie den Dienstanbieter zu hinzufügen config/app .php
.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
public function store(Request $request) { $this->validate($request, [ 'type' => ['required', new EnumValue(UserType::class)], ]); // 保存用户等等... }
use App\Enums\UserType; use BenSampo\Enum\Rules\EnumValue;🎜 Sie erstellen eine Aufzählung in dieser Datei A eine gewisse Menge an Gerüsten war zu sehen. Am Anfang der Datei ist die Liste der möglichen Optionen als Konstanten definiert. Diese konstanten Werte werden in der Datenbank gespeichert, daher finde ich es am besten, Ganzzahlen zu verwenden. Es gibt jedoch keine Einschränkung bei der Verwendung von Ganzzahlen, solange jeder Wert eindeutig ist. 🎜🎜Die Optionen in diesem Beispiel sehen so aus: 🎜rrreee🎜🎜Speichern Sie den Wert in der Datenbank🎜🎜🎜Jetzt haben wir eine Aufzählung mit einigen Möglichkeiten und können beginnen, sie zu verwenden. Bei der Migration der Benutzertabelle können Sie Folgendes hinzufügen. 🎜rrreee🎜Da null keine Option für die Aufzählung ist, müssen wir einen Standardwert dafür festlegen. In diesem Beispiel muss davon ausgegangen werden, dass der Standardbenutzer zum Standardmitglied wird. 🎜🎜Stellen Sie sicher, dass Sie die Verwendungsanweisung für diese Enumeration oben in der Datei einfügen. 🎜rrreee🎜🎜Aufzählungen in Operationen verwenden🎜🎜🎜Da unser Benutzermodell jetzt über eine typisierte Eigenschaft verfügt, können wir darauf zugreifen und sie mit dem Aufzählungswert vergleichen. Das ist der wahre Vorteil von Aufzählungen und der Grund, warum ich sie so mag. Schauen Sie sich unten die Anwendungsbeispiele und möglichen Alternativen an. 🎜rrreee🎜Wenn wir keine Aufzählungen verwenden würden, hätten wir möglicherweise Code ähnlich dem folgenden: 🎜rrreee🎜Das erste Beispiel mit Aufzählungen ist am einfachsten zu lesen und am wenigsten fehleranfällig. Wenn ich versehentlich
UserType::Paidember
eingebe (beachten Sie die Rechtschreibfehler), erhalte ich anstelle von etwas eine nette Fehlermeldung, die mir mitteilt, dass der Code falsch ist (der konstante Wert existiert in der Klasse nicht). Die ersten beiden Beispiele scheitern stillschweigend. (Nur um zu beurteilen, dass die Bedingungen nicht erfüllt sind, müssen Sie den relevanten Code noch speziell anhand der aktuellen Bedingungsanweisung überprüfen?) der Benutzertyp, zu dem sie gehören. Wenn wir einfach den aus der Datenbank erhaltenen ganzzahligen Wert ausgeben, können wir offensichtlich nicht die gewünschten Ergebnisse erzielen. Verwenden Sie stattdessen die Methode getDescription
der Basisklasse, die jede Aufzählungsklasse erbt. 🎜🎜Die Vorgänge auf der Blade-Vorlage lauten wie folgt: 🎜rrreee🎜Die Ausgabeergebnisse sind Administrator
(Administrator), PaidMember
(bezahltes Mitglied), Mitglied Code>( Mitglied). 🎜🎜Manchmal ist der Schlüsselwortname ein zusammengesetztes Wort (wie <code>PaidMember
) und wir möchten etwas anderes als den Schlüsselnamen anzeigen. Wir können die aktuelle Enumerationsbeschreibung wie folgt überschreiben. In app/Enums/UserType.php
:🎜rrreee🎜Wenn wir nun getDescription
aufrufen, erhalten wir Administrator
, Paid Member code> oder <code>Member
.🎜🎜🎜Überprüfungsmethode🎜🎜🎜Wenn Sie Aufzählungswerte durch Benutzereingaben ändern, stellen Sie am besten sicher, dass wir nur gültige Werte akzeptieren. Wir können Validierungsregeln aus dem Paket verwenden. 🎜当以表格展示枚举的时候,我经常把他们显示为 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视频教程】
Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Verwendung von Aufzählungen in Laravel sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!