PHP Larave 框架枚举型号配置的设计问题讨论! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jsrgqinbin
V2EX    PHP

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

  •  2
     
  •   jsrgqinbin May 27, 2017 4138 views
    This topic created in 3260 days ago, the information mentioned may be changed or developed.

    系统开发过程中会出现好多状态类的字段,如:订单分为订单状态,发货状态,支付状态。数据库存放肯定是 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 replies    2017-05-28 09:11:38 +08:00
    ahkxhyl
        1
    ahkxhyl  
       May 27, 2017
    放 helper 呢?
    jsrgqinbin
        2
    jsrgqinbin  
    OP
       May 27, 2017
    @ahkxhyl 好多单据都有状态,放 helper 到时候会很乱吧。。。
    sun522198558
        3
    sun522198558  
       May 27, 2017
    标题都少了个 l
    ylsc633
        4
    ylsc633  
       May 27, 2017
    那要么 妥协一下 数据库, 存字符串类型... 这样前端不管什么语言 都能看懂...

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

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

    多的话,那还是数据库吧
    ahkxhyl
        19
    ahkxhyl  
       May 27, 2017
    那就放 model 了 哪块功能放在哪个 model 里
    wanghanlin
        20
    wanghanlin  
       May 27, 2017
    @bugsnail 可以单独搞个类,不存数据库,类里存着就行了
    wujunze
        21
    wujunze  
       May 27, 2017
    楼主可能需要这个 PHP 实现的枚举数据结构 https://github.com/myclabs/php-enum
    Fishdrowned
        22
    Fishdrowned  
       May 27, 2017 via Android
    加前缀拼接,然后维护翻译文件,例如
    order_status_0 => 待支付 / Pending
    order_status_1 => 已支付 / Paid
    mingyun
        23
    mingyun  
       May 28, 2017
    @wujunze 为了这个加载个库没必要吧
    About     Help     Advertise     Blog     API     FAQ     Solana     2862 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 10:52 PVG 18:52 LAX 03:52 JFK 06:52
    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