将枚举与 select2 列表连接
Connect enums with select2 list
我有一个用于我的数据表的创建和编辑表单,我有一个下拉列表
looks like this
我是这样手动创建下拉菜单的:
<select name="type" id="type" class="form-control">
<option value="1">COM01</option>
<option value="2">COM02</option>
<option value="3">COM03</option>
<option value="4">COM04</option>
<option value="5">COM05</option>
<option value="6">COM06</option>
<option value="7">COM07</option>
<option value="8">COM08</option>
<option value="9">COM09</option>
</select>
但是,我正在使用 Laravel Enums library by bensampo,我想用它来生成 select 列表。我在名为
的 .php 文件中有这个 class
MailMessageType
<?php
namespace App\Enums;
use BenSampo\Enum\Enum;
/**
* @method static static COM01()
* @method static static COM02()
* @method static static COM03()
* @method static static COM04()
* @method static static COM05()
* @method static static COM06()
* @method static static COM07()
* @method static static COM08()
* @method static static COM09()
* @method static static OptionOne()
* @method static static OptionTwo()
* @method static static OptionThree()
*/
final class MailMessageType extends Enum {
const COM01 = 0;
const COM02 = 2;
const COM03 = 3;
const COM04 = 4;
const COM05 = 5;
const COM06 = 6;
const COM07 = 7;
const COM08 = 8;
const COM09 = 9; }
我必须将此枚举 class 与我的创建和编辑表(如我的第一张图片)一起使用,并且我需要使用 select2 作为数字发送到我的表单 插件脚本,不是简单的select或
我该怎么做?
非常感谢:D
您可以将枚举作为 key/value 数组访问。如果您查看 library on GitHub
您将看到执行此操作的两个函数 static asArray(): array
and static asSelectArray(): array
。在你的情况下,要让数组填充你的 select 你会打电话:
// returns [0 => 'COM01', 1 => 'COM02', 2 => 'COM03', ...]
MailMessageType::asSelectArray()
您可以像这样以某种方式将它传递给您的模板:
return view('my.view', [
// ...
'mailMessageTypes' => MailMessageType::asSelectArray(),
]);
然后你可以在你的模板中循环它:
<select name="type" id="type" class="form-control">
@foreach ($mailMessageTypes as $value => $label)
<option value="{{ $value }}">
{{ $label }}
</option>
@endforeach
</select>
然后只需初始化 select2 实例:
$('#type').select2();
更新
asSelectArray()
函数采用枚举库的版本 3.3.0,但对于版本 2.x,函数是 toSelectArray()
.
此外,该库使用了一个名为 getFriendlyKeyName()
to convert the key to a string. In this case it thinks a capital letter is a new word and puts a space between each, hence getting C o m01
. However it provides a Localization feature which allows you to specify how the strings should be converted 的静态函数。在你的情况下,你会像这样制作一个文件:
// resources/lang/en/enums.php
<?php
use App\Enums\MailMessageType;
return [
MailMessageType::class => [
MailMessageType::COM01 => 'COM01',
MailMessageType::COM02 => 'COM02',
MailMessageType::COM03 => 'COM03',
MailMessageType::COM04 => 'COM04',
MailMessageType::COM05 => 'COM05',
MailMessageType::COM06 => 'COM06',
MailMessageType::COM07 => 'COM07',
MailMessageType::COM08 => 'COM08',
MailMessageType::COM09 => 'COM09',
],
];
此翻译优先,应该会为您提供正确转换的字符串。您还必须正确扩展枚举 class:
use BenSampo\Enum\Enum;
use BenSampo\Enum\Contracts\LocalizedEnum;
final class MailMessageType extends Enum implements LocalizedEnum
{
// ...
}
如果您不想使用本地化,您可以单独 override the getDescription()
method。
我有一个用于我的数据表的创建和编辑表单,我有一个下拉列表 looks like this
我是这样手动创建下拉菜单的:
<select name="type" id="type" class="form-control">
<option value="1">COM01</option>
<option value="2">COM02</option>
<option value="3">COM03</option>
<option value="4">COM04</option>
<option value="5">COM05</option>
<option value="6">COM06</option>
<option value="7">COM07</option>
<option value="8">COM08</option>
<option value="9">COM09</option>
</select>
但是,我正在使用 Laravel Enums library by bensampo,我想用它来生成 select 列表。我在名为
的 .php 文件中有这个 classMailMessageType
<?php
namespace App\Enums;
use BenSampo\Enum\Enum;
/**
* @method static static COM01()
* @method static static COM02()
* @method static static COM03()
* @method static static COM04()
* @method static static COM05()
* @method static static COM06()
* @method static static COM07()
* @method static static COM08()
* @method static static COM09()
* @method static static OptionOne()
* @method static static OptionTwo()
* @method static static OptionThree()
*/
final class MailMessageType extends Enum {
const COM01 = 0;
const COM02 = 2;
const COM03 = 3;
const COM04 = 4;
const COM05 = 5;
const COM06 = 6;
const COM07 = 7;
const COM08 = 8;
const COM09 = 9; }
我必须将此枚举 class 与我的创建和编辑表(如我的第一张图片)一起使用,并且我需要使用 select2 作为数字发送到我的表单 插件脚本,不是简单的select或
我该怎么做?
非常感谢:D
您可以将枚举作为 key/value 数组访问。如果您查看 library on GitHub
您将看到执行此操作的两个函数 static asArray(): array
and static asSelectArray(): array
。在你的情况下,要让数组填充你的 select 你会打电话:
// returns [0 => 'COM01', 1 => 'COM02', 2 => 'COM03', ...]
MailMessageType::asSelectArray()
您可以像这样以某种方式将它传递给您的模板:
return view('my.view', [
// ...
'mailMessageTypes' => MailMessageType::asSelectArray(),
]);
然后你可以在你的模板中循环它:
<select name="type" id="type" class="form-control">
@foreach ($mailMessageTypes as $value => $label)
<option value="{{ $value }}">
{{ $label }}
</option>
@endforeach
</select>
然后只需初始化 select2 实例:
$('#type').select2();
更新
asSelectArray()
函数采用枚举库的版本 3.3.0,但对于版本 2.x,函数是 toSelectArray()
.
此外,该库使用了一个名为 getFriendlyKeyName()
to convert the key to a string. In this case it thinks a capital letter is a new word and puts a space between each, hence getting C o m01
. However it provides a Localization feature which allows you to specify how the strings should be converted 的静态函数。在你的情况下,你会像这样制作一个文件:
// resources/lang/en/enums.php
<?php
use App\Enums\MailMessageType;
return [
MailMessageType::class => [
MailMessageType::COM01 => 'COM01',
MailMessageType::COM02 => 'COM02',
MailMessageType::COM03 => 'COM03',
MailMessageType::COM04 => 'COM04',
MailMessageType::COM05 => 'COM05',
MailMessageType::COM06 => 'COM06',
MailMessageType::COM07 => 'COM07',
MailMessageType::COM08 => 'COM08',
MailMessageType::COM09 => 'COM09',
],
];
此翻译优先,应该会为您提供正确转换的字符串。您还必须正确扩展枚举 class:
use BenSampo\Enum\Enum;
use BenSampo\Enum\Contracts\LocalizedEnum;
final class MailMessageType extends Enum implements LocalizedEnum
{
// ...
}
如果您不想使用本地化,您可以单独 override the getDescription()
method。