Лучший способ справиться с повторяющимися статусами, используя перечисления и модели

Этот вопрос связан с форматированием, представлением и автозаполнением в отношении статусов. Я не нашел способа эффективно использовать перечисления для более сложных сценариев.

у меня несколько таблиц

  • Пользователь
  • Сообщение
  • Категория

В каждой таблице есть столбец status, а также другие столбцы перечисления. Я создал следующие перечисления:

  • Приложение\Enums\Пользователь\Статус.php;
  • App\Enums\Post\Status.php;
  • App\Enums\Category\Status.php;

Внутри моего кода мне нужно ссылаться на статусы каждой модели, например:

$user->status = Status::APPROVED;
$post->status = Status::COMPLETE;
$category->status = Status::OPEN;

Статусы не связаны друг с другом и различны для каждой модели. Проблема связана с форматированием, так как очень легко перепутать статусы, если все они имеют одинаковый префикс.

Я знаю, что я также могу сделать это:

$user->status = \App\Enums\User\Status::APPROVED;
$post->status = \App\Enums\Post\Status::COMPLETE;
$category->status = \App\Enums\Category\Status::OPEN;

Однако это не очень чисто, и мне интересно, есть ли лучший способ. В идеале я хотел бы сделать:

$user->status = User::Status::APPROVED;
$post->status = Post::Status::COMPLETE;
$category->status = Category::Status:OPEN;

Я пытался сделать это в своей модели, но не работает, так как не могу создать экземпляр нового объекта вне метода:

class User extends Model
{
    public Status $STATUS = new Status();

Вышеупомянутое дает мне автозаполнение и чистый синтаксис, но это явно не работает.

Есть ли решения для моего варианта использования? Что-то, что дает мне автодополнение и сохраняет код чистым и коротким?

вы можете добавить их в конфиг

Xupitan 11.05.2022 08:18

Я хотел бы использовать перечисления, если это возможно, для проверки типов

Bernard Wiesner 11.05.2022 08:25

или вы можете изменить имя так же, как: \App\Enums\User\Status as UserStatus;

Xupitan 11.05.2022 08:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы можете использовать

class User extends Model
{
    /** @var Status */
    public static $status = Status::class;
}

Или

use \App\Enums\User\Status as UserStatus

Проблема в том, что некоторые модели имеют длинные имена, и это тоже не очевидно. Такая модель, как UserPurchaseHistory, оказалась бы UserPurchaseHistoryStatus, что тоже не очевидно. Я попробовал Status::class, но он не работает, поскольку он разрешается в строку, а не в экземпляр Enum.

Bernard Wiesner 11.05.2022 08:40

Он разрешается в экземпляр Enum, вы можете попробовать User::$status::APPROVED, это работает. @BernardWiesner

bubbak 11.05.2022 08:43

Другие вопросы по теме