您的位置: 翼速应用 > 业内知识 > PHP框架 > 正文

Laravel教程之枚举的正确打开方式!

本文给大家带来了Laravel的教程,介绍一下在 Laravel 中枚举的正确打开方式,一起来看一下。


Laravel教程之枚举的正确打开方式!


Laravel教程之枚举的正确打开方式!


使用枚举有几个好处:


●  -减少因转置或错误输入数字而导致的错误。


●  -使将来改变价值观变得容易。


●  -使代码更易于阅读,这意味着不太可能有错误潜入其中。


●  -确保前向兼容性使用枚举时,如果将来有人更改与成员名称对应的值,可以大大降低你的代码失败几率。


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;


以上就是关于Laravel教程之枚举的正确打开方式解析,翼速应用平台内有更多相关资讯,欢迎查阅!

我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题