Bericht
In einem Projekt, an dem ich gearbeitet habe, gab es ein Auswahlfeld, das Werte definierte, die sich nicht ändern würden. Um die Elemente in dieser Auswahl aufzulisten, habe ich beschlossen, eine Aufzählungsklasse zu erstellen und diese Werte dann zu beschreiben. Allerdings musste das Projekt die Sprachen Englisch und Spanisch unterstützen, und der Text der Auswahloptionen musste daran angepasst werden, ohne den Verweis auf das jeweilige Enum-Element zu verlieren. Mit anderen Worten: Wenn ich den Artikel „Pferd“ ausgewählt habe, musste das System wissen, dass dieser Artikel immer noch „Pferd“ ist, obwohl er als „Pferd“ oder „Caballo“ erscheint. Um die Integrität der Daten zu wahren, habe ich die folgende Struktur erstellt, die enum und lang in das Projekt integriert.
Was sind Aufzählungen?
Eine kurze Einführung. Ab PHP Version 8.1 wurde eine spezielle Klasse zum Aufzählen von Werten eingeführt. In der Praxis bedeutet dies, dass wir eine Klasse erstellen können, deren Eigenschaftswerte konstant sind. Ein Beispiel ist der Status, denn wenn Sie ihn frei lassen, werden Sie im gesamten Code wahrscheinlich einen „aktiven“ Status, einen anderen „Aktiv“, einen anderen „Aktiv“ usw. haben. Aber wenn Sie den Status an eine Aufzählung binden und die Aufzählung verwenden, anstatt die Zeichenfolge einzugeben, kann ich sicher sein, dass der Wert überall im Code immer der Wert in der Aufzählung ist.
enum Status { case ATIVO = "ativo"; case INATIVO = "inativo"; case PENDENTE = "pendente"; }
Enums und lang
Da es sich bei der Aufzählung um eine Klasse handelt, kann ich normalerweise Methoden für meine Klasse erstellen. Deshalb habe ich die display()-Methode erstellt, die für die Visualisierung meines Enum-Werts verantwortlich ist und ihn an die vom Benutzer verwendete Sprache anpasst, ohne jedoch den ursprünglichen Wert in meinem Enum-Element zu ändern. Mit anderen Worten: Für den Benutzer erscheint der Status „Ausstehend“ oder „Ausstehend“ oder „Ausstehend“; aber in der Datenbank wird es nur als „ausstehend“ gespeichert – das ist der ursprüngliche Wert und über ihn kann ich mein Element aus der Aufzählung abrufen und von diesem Element aus die Anzeigemethode verwenden, um es dem Benutzer übersetzt anzuzeigen.
Aber bevor wir das Beispiel zeigen, eine Einführung in Laravel lang. lang ist ein Ordner im Projektstammverzeichnis, in dem Übersetzungen gespeichert werden, die Ihr Projekt unterstützt. Jede Sprache hat einen Ordner und in diesem Ordner Dateien für Übersetzungskontexte. Diese Dateien haben ein Array, wobei der Schlüssel eine Darstellung des Wortes und der Wert die Übersetzung in die jeweilige Sprache ist.
Konfigurieren der Anzeigemethode
Im lang-Ordner erstelle ich für jeden Sprachordner eine status.php-Datei mit dem folgenden Array:
value => "Ativo", Status::INATIVO->value => "Inativo", Status::PENDENTE->value => "Pendente", ];
Ich korrigiere die Array-Werte auf die jeweiligen Übersetzungen der jeweiligen Sprache.
Und meine Anzeigemethode ruft die Übersetzung des Enum-Elements in diesen status.php-Dateien ab und gibt diesen Wert zurück.
public function display(): string { return trans('status.'.$this->value); }
Anwendungsbeispiel:
// EN echo Status::ATIVO->display(); // Active // PT_BR echo Status::INATIVO->display(); // Inativo // ES echo Status::PENDENTE->display(); // Pediente
Abschluss
Damit garantiere ich, dass mein Enum-Wert in meinem Code konstant bleibt, er sich jedoch mithilfe der Anzeigemethode an die Sprache des Benutzers anpasst, ohne die Datenintegrität zu verlieren. Es bleibt auch flexibel, wenn ich dem System eine neue Sprache hinzufüge. Ich hoffe, es hat Ihnen gefallen und bis zum nächsten Mal.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3