PHP Larave 框架枚举型号配置的设计问题讨论! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jsrgqinbin
V2EX    PHP

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

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

    系统开发过程中会出现好多状态类的字段,如:订单分为订单状态,发货状态,支付状态。数据库存放肯定是 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:6 +08:00
    你可以自己写一个类来模拟缺失的枚举类型。
    run2
        8
    run2  
       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     Solana     2391 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:20 PVG 18:20 LAX 02:20 JFK 05:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86