Maison > cadre php > Laravel > le corps du texte

Parlons de la façon d'utiliser les énumérations dans Laravel

青灯夜游
Libérer: 2022-09-21 20:35:14
avant
2166 Les gens l'ont consulté

Comment utiliser les énumérations dans Laravel ? L'article suivant vous présentera comment utiliser les énumérations dans Laravel. J'espère qu'il vous sera utile !

Parlons de la façon d'utiliser les énumérations dans Laravel

Je suis un grand fan des énumérations. Dernièrement, j'ai travaillé dans une entreprise utilisant C# où les énumérations sont largement utilisées, et j'ai l'habitude de pouvoir les trouver quand je ne les trouve pas, et ils me manquent.

Je les utilise pour tout ce qui a un ensemble limité d'options possibles, comme le jour de la semaine, le statut d'une commande ou, comme dans l'exemple ci-dessous, le type d'utilisateur.

L'utilisation des énumérations présente plusieurs avantages :

- Réduit les erreurs causées par la transposition ou la faute de frappe des nombres.

- Facilite la modification des valeurs à l'avenir.

- Rend le code plus facile à lire, ce qui signifie qu'il y a moins de risques que des bugs s'y infiltrent.

- Assurer la compatibilité ascendante Lorsque vous utilisez des énumérations, vous pouvez réduire considérablement le risque d'échec de votre code si quelqu'un modifie la valeur correspondant au nom du membre à l'avenir.

PHP lui-même ne prend pas en charge les énumérations, mais il est assez facile d'obtenir des effets équivalents en utilisant des constantes dans les classes. De plus, j'ai créé un package Laravel appelé laravel-enum. Il vous permet d'accéder à des fonctions d'assistance telles que la liste des clés et des valeurs, l'ajout de descriptions aux valeurs et la validation des requêtes qui attendent des valeurs d'énumération.

Ce guide décrit le processus d'installation d'un package Laravel, y compris des exemples d'utilisation et de bonnes pratiques.

Package d'installation

Vous pouvez installer le package en exécutant la commande suivante dans le terminal via composer :

$ composer require bensampo/laravel-enum
Copier après la connexion

Si vous utilisez une version de Laravel inférieure à 5.5, vous devez ajouter le fournisseur de services à config /app .php.config/app.php.

'BenSampo\Enum\EnumServiceProvider'
Copier après la connexion

创建第一个枚举

我们将为用户类型创建一个枚举在我们的示例应用程序中,用户可以属于以下三种用户类型之一:管理员、付费成员、成员。

包中包含用于创建枚举的生成器,因此可以运行以下命令来创建名为UserType的枚举该文件将在“app/Enums/UserType.php”中创建

php artisan make:enum UserType
Copier après la connexion

你将在这个文件中看到一定数量的脚手架。在文件顶部附近,可能的选项列表被定义为常量。这些常量值存储在数据库中,因此我发现最好是使用整数,但是并没有限制一定要使用整数,只要每一个值都是唯一就可以了了。

本例中的选项看起来是这样的:

const Administrator = 0;
const PaidMember = 1;
const Member = 2;
Copier après la connexion

把值存储在数据库中

现在我们有了一个带有一些可能性的枚举,并且可以开始使用它。在迁移 user 表时, 可以添加以下内容。

$table->tinyInteger('type')->unsigned()->default(UserType::Member);
Copier après la connexion

因为 null 不是枚举的选项,我们需要为它设置默认值。在这个例子中,有必要去假设默认情况下的用户将成为标准成员。

确保文件的顶部包含此枚举的 use 语句。

use App\Enums\UserType;
Copier après la connexion

在操作中使用枚举

由于我们现在的用户模型具有类型的属性,我们可以对它进行访问,并和 enum 值进行比较。这就是枚举真正的好处,也是我为什么如此喜欢他们。看一下下面的用法示例和可能替代的方法。

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

如果我们不使用枚举,可能会有类似以下的代码:

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

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

使用枚举的第一个例子是最容易读懂并且也是最不容易出错的例子。如果我偶然输入了 UserType::Paidember (注意拼写错误),我会得到一个很好的错误提示,告诉我代码错误了(类中不存在这个常量值),而不是像前两个示例那样默默的失败。(只是判断不符合条件,你还需要根据当前的条件语句去具体的查看相关代码?)

显示枚举

在应用的某些界面,我们可能希望向用户显示他们所属的用户类型。如果只是简单的输出从数据库所获取的整型值,显然达不到我们想要的结果。相反,可使用每个枚举类所继承基类的  getDescription 方法。

在 blade 模板上的操作如下:

<p>{{ \App\Enums\UserType::getDescription($user->type) }}</p>
Copier après la connexion

输出结果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);
    }
}
Copier après la connexion

现在当我们调用  getDescription 我们将获取到 AdministratorPaid member or Member

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

    // 保存用户等等...
}
Copier après la connexion
Copier après la connexion

Création de la première énumération

Nous allons créer une énumération pour le type d'utilisateur Dans notre exemple d'application, un utilisateur peut appartenir à l'un des trois types d'utilisateurs suivants : Administrateur , payant membres, membres.

Le package contient des générateurs pour créer des énumérations, vous pouvez donc exécuter la commande suivante pour créer une énumération appelée UserType Le fichier sera créé dans "app/Enums/UserType.php" 🎜
use App\Enums\UserType;
use BenSampo\Enum\Rules\EnumValue;
Copier après la connexion
Copier après la connexion
🎜 Vous créerez une énumération dans ce fichier A une certaine quantité d'échafaudages a été vue. En haut du fichier, la liste des options possibles est définie sous forme de constantes. Ces valeurs constantes sont stockées dans la base de données, j'ai donc trouvé préférable d'utiliser des nombres entiers, mais il n'y a aucune restriction sur l'utilisation de nombres entiers tant que chaque valeur est unique. 🎜🎜Les options de cet exemple ressemblent à ceci : 🎜rrreee🎜🎜Stockez la valeur dans la base de données🎜🎜🎜Nous avons maintenant une énumération avec quelques possibilités et pouvons commencer à l'utiliser. Lors de la migration de la table utilisateur, vous pouvez ajouter les éléments suivants. 🎜rrreee🎜Puisque null n'est pas une option pour l'énumération, nous devons lui définir une valeur par défaut. Dans cet exemple, il faut supposer que l'utilisateur par défaut deviendra un membre standard. 🎜🎜Assurez-vous d'inclure la déclaration d'utilisation pour cette énumération en haut du fichier. 🎜rrreee🎜🎜Utilisation des énumérations dans les opérations🎜🎜🎜Étant donné que notre modèle utilisateur a désormais une propriété typée, nous pouvons y accéder et la comparer à la valeur de l'énumération. C'est le véritable avantage des énumérations, et pourquoi je les aime tant. Jetez un œil aux exemples d’utilisation et aux alternatives possibles ci-dessous. 🎜rrreee🎜Si nous n'utilisions pas d'énumérations, nous pourrions avoir un code similaire au suivant : 🎜rrreee🎜Le premier exemple utilisant des énumérations est le plus facile à lire et le moins sujet aux erreurs. Si je tape accidentellement UserType::Paidember (notez la faute d'orthographe), je reçois un joli message d'erreur me disant que le code est erroné (cette valeur constante n'existe pas dans la classe), au lieu de quelque chose comme Les deux premiers exemples échouent silencieusement. (Juste pour juger que les conditions ne sont pas remplies, vous devez quand même vérifier le code pertinent spécifiquement en fonction de l'instruction conditionnelle actuelle ?)🎜🎜🎜Afficher l'énumération🎜🎜🎜Dans certaines interfaces de l'application, nous pouvons souhaiter afficher aux utilisateurs le type d'utilisateur auquel ils appartiennent. Si nous produisons simplement la valeur entière obtenue à partir de la base de données, nous ne pouvons évidemment pas obtenir les résultats souhaités. Utilisez plutôt la méthode getDescription de la classe de base dont hérite chaque classe d'énumération. 🎜🎜Les opérations sur le modèle de lame sont les suivantes : 🎜rrreee🎜Les résultats de sortie sont Administrateur (administrateur), PaidMember (membre payant), Membre code>(membre). 🎜🎜Parfois, le nom du mot-clé est un mot composé (comme <code>PaidMember), et nous souhaitons afficher quelque chose de différent du nom de la clé. Nous pouvons écraser la description actuelle de l’énumération comme suit. Dans app/Enums/UserType.php:🎜rrreee🎜Maintenant, lorsque nous appellerons getDescription, nous obtiendrons Administrateur, Membre payant code> ou Membre.🎜🎜🎜Méthode de vérification🎜🎜🎜Lors de la modification des valeurs d'énumération via la saisie de l'utilisateur, il est préférable de s'assurer que nous n'acceptons que des valeurs valides. Nous pouvons utiliser les règles de validation du package. 🎜

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

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

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

    // 保存用户等等...
}
Copier après la connexion
Copier après la connexion

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

use App\Enums\UserType;
use BenSampo\Enum\Rules\EnumValue;
Copier après la connexion
Copier après la connexion

结束

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

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

【相关推荐:laravel视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!