V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jsrgqinbin
V2EX  ›  PHP

PHP Larave 框架枚举型号配置的设计问题讨论!

  •  2
     
  •   jsrgqinbin · 2017-05-27 13:12:52 +08:00 · 3468 次点击
    这是一个创建于 2766 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统开发过程中会出现好多状态类的字段,如:订单分为订单状态,发货状态,支付状态。数据库存放肯定是 0,1,2,3,4 这样来存,为了方便使用会在 Repository 或者 Model 里定义部分常量,如下:

    const ORDER_STATUS_CREATE = 0;//初始状态
    const ORDER_STATUS_PAIED = 1;//已支付状态
    

    问题来了:

    • 在页面上会用到这个枚举,如搜索的时候的状态下拉列表,因为系统涉及到多语言,所以这个存在哪儿比较纠结,存在 config 里那在 Repository 里还在有方法做翻译处理。如:
    public static function getStatusMap()
    {
        return [
            self::ORDER_STATUS_CREATE => trans('xxxx'),
            self::ORDER_STATUS_PAIED => trans('xxxx')
        ];
    }
    //用以上方法来写,总感觉设计上不妥当,但是不没想到更好的办法
    
    • 另外在视图上可能有些状态的验证,视图中直接调用这个 const 总感觉不是很妥当,但是如果通过控制器中绑定给视图又太麻烦。

    以上问题有大神有好的设计?

    23 条回复    2017-05-28 09:11:38 +08:00
    ahkxhyl
        1
    ahkxhyl  
       2017-05-27 13:24:17 +08:00
    放 helper 呢?
    jsrgqinbin
        2
    jsrgqinbin  
    OP
       2017-05-27 13:28:20 +08:00
    @ahkxhyl 好多单据都有状态,放 helper 到时候会很乱吧。。。
    sun522198558
        3
    sun522198558  
       2017-05-27 13:37:40 +08:00
    标题都少了个 l
    ylsc633
        4
    ylsc633  
       2017-05-27 13:42:31 +08:00
    那要么 妥协一下 数据库, 存字符串类型... 这样前端不管什么语言 都能看懂...

    就是查的时候 慢一点了...
    aksoft
        5
    aksoft  
       2017-05-27 13:44:23 +08:00
    二维
    jsrgqinbin
        6
    jsrgqinbin  
    OP
       2017-05-27 14:11:19 +08:00
    @ylsc633 其实不是慢一点。。。数据大一点的话,慢不少。。。
    jswh
        7
    jswh  
       2017-05-27 14:27:06 +08:00
    你可以自己写一个类来模拟缺失的枚举类型。
    sobigfish
        8
    sobigfish  
       2017-05-27 14:32:46 +08:00
    放 Model 里
    因为是 Model 相关的状态
    比如 Order 的 status (括号内为举例 原来的 1 2 3 4)
    return 非 locale 的 key (order_status_created)
    在具体显示页面在显示为 locale 后的 value (“订单已创建”)
    chenset
        9
    chenset  
       2017-05-27 14:37:41 +08:00
    我们是在 config 目录下面建立的数组配置, phpstorm 下面有 laravel plugin 可以安装. 装完后支持 config()函数的自动完成提示, 爽的不要不要的.
    jsrgqinbin
        10
    jsrgqinbin  
    OP
       2017-05-27 15:33:14 +08:00
    @chenset config 里多语言好像是问题
    qce7
        11
    qce7  
       2017-05-27 16:09:03 +08:00
    model+1
    cys
        12
    cys  
       2017-05-27 16:19:23 +08:00
    - 在 config 目下建立相关的数组配置
    - 通过建立字典的方式写入数据库
    johnlui
        13
    johnlui  
       2017-05-27 16:34:05 +08:00
    必须用中文呀
    wanghanlin
        14
    wanghanlin  
       2017-05-27 17:06:43 +08:00
    歪个楼,pay 应该是 paid,不是 paied,另外 create 最好统一形式用 created 吧
    wanghanlin
        15
    wanghanlin  
       2017-05-27 17:08:54 +08:00
    存数据库就好了,专门一个 order_statuses 表
    bugsnail
        16
    bugsnail  
       2017-05-27 17:27:30 +08:00
    @wanghanlin #15 为了几个状态,多查一次数据库浪费资源,不值得
    wanghanlin
        17
    wanghanlin  
       2017-05-27 17:39:15 +08:00
    @bugsnail 这不还有 cache 么
    bugsnail
        18
    bugsnail  
       2017-05-27 17:41:38 +08:00
    @wanghanlin #17 跑题了,还是谈设计吧

    状态少的话,我感觉还是放 config 里面好一点,当然 helper 也行;

    多的话,那还是数据库吧
    ahkxhyl
        19
    ahkxhyl  
       2017-05-27 17:47:25 +08:00
    那就放 model 了 哪块功能放在哪个 model 里
    wanghanlin
        20
    wanghanlin  
       2017-05-27 17:50:46 +08:00
    @bugsnail 可以单独搞个类,不存数据库,类里存着就行了
    wujunze
        21
    wujunze  
       2017-05-27 17:55:08 +08:00
    楼主可能需要这个 PHP 实现的枚举数据结构 https://github.com/myclabs/php-enum
    Fishdrowned
        22
    Fishdrowned  
       2017-05-27 22:31:17 +08:00 via Android
    加前缀拼接,然后维护翻译文件,例如
    order_status_0 => 待支付 / Pending
    order_status_1 => 已支付 / Paid
    mingyun
        23
    mingyun  
       2017-05-28 09:11:38 +08:00
    @wujunze 为了这个加载个库没必要吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2954 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:07 · PVG 21:07 · LAX 05:07 · JFK 08:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.