枚举类中如何定义和使用getIcon方法?

问题描述 投票:0回答:1

在 laravel 10 /filamentphp 3 应用程序中,我在 app/Enums/UserQuizRequestStatus.php 中有枚举类:

namespace App\Enums;

use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasIcon;
use Filament\Support\Contracts\HasLabel;

enum UserQuizRequestStatus: string implements HasColor, HasLabel, HasIcon
{
    // These values are the same as enum values in db
    case WAITING_FOR_JOB_SEEKER_QUIZ_RESULT = 'W';
    case NEEDS_FOR_MANAGERS_REVIEW = 'N';
    case ACCEPT_FOR_MEETING = 'A';
    case HIRED = 'H';
    case MARK_FOR_FUTURE_CONTACTS = 'F';
    case EXPIRED = 'E';
    case REJECTED = 'R';

    public static function getStatusSelectionItems($filterItems = []): array
    {
        $statusSelectionItems = [self::WAITING_FOR_JOB_SEEKER_QUIZ_RESULT->value => 'Waiting for job seeker quiz result', //  = 'W';
            self::NEEDS_FOR_MANAGERS_REVIEW->value => 'Needs for managers review',  // 'N'
            self::ACCEPT_FOR_MEETING->value => 'Accept for meeting', // 'A'
            self::HIRED->value => 'Hired and saved as employee', // 'H'
            self::MARK_FOR_FUTURE_CONTACTS->value => 'Marked for future contacts', // 'M'
            self::EXPIRED->value => 'Expired', // 'E'
            self::REJECTED->value => 'Rejected STATUS HIDE DONE' // 'R'];
        ];

        if (count($filterItems) === 0) {
            return $statusSelectionItems;
        }

        // Need to return ubset of options
        $resArray = [];
        foreach ($statusSelectionItems as $key => $label) {
            foreach ($filterItems as $filterItem) {
                if ($filterItem->value === $key) {
                    $resArray[$key] = $label;
                    break;
                }
            }
        }

        return $resArray;
    }

    public function getLabel(): ?string
    {
        return self::getStatusLabel($this);
    }

    public function getColor(): string|array|null
    {
        return match ($this) {
            self::WAITING_FOR_JOB_SEEKER_QUIZ_RESULT => 'user_quiz_request_status_waiting_for_job_seeker_quiz_result',
            self::NEEDS_FOR_MANAGERS_REVIEW => 'user_quiz_request_status_needs_for_managers_review',
            self::ACCEPT_FOR_MEETING => 'user_quiz_request_status_accept_for_meeting',
            self::HIRED => 'user_quiz_request_status_hired_and_saved_as_employee',
            self::MARK_FOR_FUTURE_CONTACTS => 'user_quiz_request_status_mark_for_future_contacts',
            self::EXPIRED => 'user_quiz_request_status_expired',
            self::REJECTED => 'user_quiz_request_status_rejected',
        };
    }

    /* Custom Labels are used, not from case definitions */
    public static function getStatusLabel(?UserQuizRequestStatus $status): string
    {
        if (empty($status)) {
            return '';
        }

        $statusSelectionItems = self::getStatusSelectionItems();
        if ( ! empty($statusSelectionItems[$status->value])) {
            return $statusSelectionItems[$status->value];
        }

        return '';
    }

    public function getIcon(): ?string
    {
        return match ($this) {
            self::WAITING_FOR_JOB_SEEKER_QUIZ_RESULT => 'heroicon-m-pencil',
            self::NEEDS_FOR_MANAGERS_REVIEW => 'heroicon-m-eye',
            self::ACCEPT_FOR_MEETING => 'heroicon-m-check',
            self::HIRED => 'heroicon-m-x-mark',
            self::MARK_FOR_FUTURE_CONTACTS => 'heroicon-m-arrows-pointing-out',
            self::EXPIRED => 'heroicon-m-clock',
            self::REJECTED => 'heroicon-m-bell-slash',
        };
    }
}

问题是我需要在操作类中显示该图标的某些值的图标,例如:

    Action::make('RejectThisRequest')
        ->label(( $status === UserQuizRequestStatus::NEEDS_FOR_MANAGERS_REVIEW ? UserQuizRequestStatus::getStatusLabel($status) . '=>' : '') . 'Reject')
        // If "Needs for managers review" selected, then user meeting can be rejected
        ->visible(in_array($status->value,
            [UserQuizRequestStatus::NEEDS_FOR_MANAGERS_REVIEW->value, UserQuizRequestStatus::ACCEPT_FOR_MEETING->value]))
        ->actionIcon((new UserQuizRequestStatus::REJECTED)->getIcon()) // I this line I need to define icon of
        // rejected value without binding to some var with rejected value
        ->modalIcon('heroicon-o-academic-cap')
        ->modalIconColor('info')

使用此代码我收到错误:

syntax error, unexpected identifier "REJECTED", expecting variable or "$"
                                                          

哪种语法是正确的?

php laravel laravel-filament
1个回答
0
投票

枚举案例的行为就像类常量,而不像它们自己的类。您无法创建其中一个的“新实例”,您只能引用一个唯一的实例。

所以而不是

new UserQuizRequestStatus::REJECTED

你应该直接写

UserQuizRequestStatus::REJECTED
© www.soinside.com 2019 - 2024. All rights reserved.