我想把常量从模型里面踢出去,求赐教

像下面这样的常量可不可以单独写到一个全局变量表里面?不仅仅针对这个Order模型,我希望所有模型的常量都能写在一个全局变量表里面。除了中文,甚至可以很方便的翻译成多国语言的那种写法。况且,模型里面放上这么一大段常量似乎很臃肿,真的不好看。

请问该如何设计这个文件?
1、要求在模型引用变量的时候不是很繁琐;
2、要求修改一个全局开关即可很容易的切换多国语言版本。

const REFUND_STATUS_PENDING = 'pending';
const REFUND_STATUS_APPLIED = 'applied';
const REFUND_STATUS_PROCESSING = 'processing';
const REFUND_STATUS_SUCCESS = 'success';
const REFUND_STATUS_FAILED = 'failed';

const SHIP_STATUS_PENDING = 'pending';
const SHIP_STATUS_DELIVERED = 'delivered';
const SHIP_STATUS_RECEIVED = 'received';

public static $refundStatusMap = [
    self::REFUND_STATUS_PENDING    => '未退款',
    self::REFUND_STATUS_APPLIED    => '已申请退款',
    self::REFUND_STATUS_PROCESSING => '退款中',
    self::REFUND_STATUS_SUCCESS    => '退款成功',
    self::REFUND_STATUS_FAILED     => '退款失败',
];

public static $shipStatusMap = [
    self::SHIP_STATUS_PENDING   => '未发货',
    self::SHIP_STATUS_DELIVERED => '已发货',
    self::SHIP_STATUS_RECEIVED  => '已收货',
];
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

可以新建一个 App\Constants 类,把所有的产量和 map 都放进去。

至于多语言也很简单,把 map 的 value 改成 translation key,例如:

public static $shipStatusMap = [
    self::SHIP_STATUS_PENDING   => 'constants.ship_status.pending',
    self::SHIP_STATUS_DELIVERED => 'constants.ship_status.delivered',
    self::SHIP_STATUS_RECEIVED  => 'constants.ship_status.received',
];

然后在各个语言下创建 constants.php 文件,调用的时候就是 __(Constants::$shipStatusMap[$order->ship_status])

5年前 评论
讨论数量: 5
leo

可以新建一个 App\Constants 类,把所有的产量和 map 都放进去。

至于多语言也很简单,把 map 的 value 改成 translation key,例如:

public static $shipStatusMap = [
    self::SHIP_STATUS_PENDING   => 'constants.ship_status.pending',
    self::SHIP_STATUS_DELIVERED => 'constants.ship_status.delivered',
    self::SHIP_STATUS_RECEIVED  => 'constants.ship_status.received',
];

然后在各个语言下创建 constants.php 文件,调用的时候就是 __(Constants::$shipStatusMap[$order->ship_status])

5年前 评论

谢谢老师!稍后我尝试一下。

5年前 评论

@leo 老师你好,看了你的回复我有个疑惑就是
如果把所有常量放到一个文件内,那不是会遇到一个问题就是多个模型的常量命名可能会重复的情况吗?
也就是还得在常量前面加上模型前缀的之类作为区分?

5年前 评论
leo

@will_lin 是的,所以我选择放在各自的模型里,如果是多个模型共用的常量那么我会放在 Constants 里

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!