gpt4 book ai didi

php - Laravel - 在哪里存储状态(标志)?模型、类或配置文件夹?

转载 作者:IT老高 更新时间:2023-10-28 23:54:50 26 4
gpt4 key购买 nike

我需要在 mt 项目中广泛使用状态。我的 users(activesuspended 等)、实体(active pending_activationinactive)和我的订阅(activeon_grace_periodnot_subscribed never_subscribed).

到目前为止,我认为最好的方法是将它们存储在数据库中,但我感觉将它们存储在其他 3 个选项中要容易得多。

我还认为我可以将它们作为常量存储在我的 Eloquent 模型中。例如,我的订阅模型如下所示:

// SubscriptionModel
const SUBSCRIBED_ACTIVE = 1;
const SUBSCRIBED_ON_GRACE_PERIOD = 2;
const NOT_SUBSCRIBED = 3;
const NEVER_SUBSCRIBED = 4;

并检索它们,例如在 Blade View 中:

// subscription/index.blade.php
@if($user->subscription->status == /App/SubscriptionModel::SUBSCRIBED_ACTIVE)
<div>You are subscribed. Thank you</div>
@elseif($user->subscription->status == /App/SubscriptionModel::NEVER_SUBSCRIBED)
<div>You need to create a subscription before being granted full access!</div>
@elseif(...)
// and so on

如何做同样的事情,但使用配置文件夹并添加一个名为 status.php 的文件。在 View 中访问它就像:

@if($user->subscription->status == Config::get('status.subscription.SUBSCRIBED_ACTIVE'))
<div>You are subscribed. Thank you</div>
@elseif(...)
// etc

有没有更好的办法?

此外,等式的另一部分如何,即存储在 DB 中的状态。我是否应该只有订阅表的 status 列并存储应用程序指示的内容,或者甚至更好地创建一个单独的表 subscription_statuses 并有一个 foreign_key subscriptions 表中的 subscription_status_id

最佳答案

我倾向于为状态创建一个特定的模型,充当枚举。因此,如果我有一个 Event 模型,我可能会有一个相应的 EventStatus 模型,如下所示:

class EventStatus
{
public const CANCELLED = 'EventCancelled';
public const POSTPONED = 'EventPostponed';
public const RESCHEDULED = 'EventRescheduled';
public const SCHEDULED = 'EventScheduled';
}

然后我可以像这样进行检查:

$event->status === EventStatus::CANCELLED;

我通常也会为我的模型添加便捷方法:

class Event extends Model
{
public function isCancelled(): bool
{
return $this->status === EventStatus::CANCELLED;
}
}

对于“人性化”的字符串,我将有一个包含文本字符串的语言文件:

<?php // resources/lang/en/event_status.php

return [
EventStatus::CANCELLED => 'Cancelled',
EventStatus::POSTPONED => 'Postponed',
EventStatus::RESCHEDULED => 'Rescheduled',
EventStatus::SCHEDULED => 'Scheduled',
];

关于php - Laravel - 在哪里存储状态(标志)?模型、类或配置文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32917944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com