枚举是最近引入 PHP 的。我正在一个 laravel 项目中尝试它们。我在这里有我的枚举类:
namespace App\Enums;
enum AlertType
{
case SUCCESS;
case ERROR;
}
我正在尝试创建一个警报类,它将采用构造函数中的枚举来设置警报的严重性,这将决定它呈现给用户的颜色。这是那个类:
<?php
namespace App\View\Components;
use App\Enums\AlertType;
use Illuminate\View\Component;
class Alert extends Component
{
public string $contextClass;
public function __construct(public string $message, AlertType $alertType = AlertType::SUCCESS)
{
$this->setContextClassFromAlertType($alertType);
}
public function setContextClassFromAlertType(AlertType $alertType)
{
$this->contextClass = ($alertType === AlertType::SUCCESS ? 'success' : 'error');
}
public function getClassListFromType()
{
return [
'border-' . $this->contextClass,
'text-' . $this->contextClass
];
}
public function render()
{
return view('components.alert', [
'class' => implode(' ', $this->getClassListFromType())
]);
}
}
此警报将在使用 Laravel Livewire 和刀片组件构建的登录表单中使用:
<form class="grid grid-cols-min-auto-1 gap-x-2" id="login" action="/login" method="post">
<x-alert :message="$errorMessage"/>
@csrf
<label for="email" class="mb-2 text-lg text-sans w-min mt-2 font-thin">Email</label>
<x-basic-input wire:model="email" placeholder="{{ $emailPlaceholder }}"/>
<label for="password" class="mb-2 text-lg text-sans w-min mt-2 font-thin">Password</label>
<x-basic-input wire:model="password"/>
</form>
当我来显示登录表单时,出现以下错误:
Cannot instantiate enum App\Enums\AlertType (View: /resources/views/livewire/forms/login.blade.php)
我认为我在 Alert 组件中的枚举使用有问题,但我不确定在哪里。谁能指出我正确的方向。我已经查看了枚举的 rfc,但我看不到任何明显的我做错的事情