MaZiT
V2EX  ›  PHP

PHP 接口 40 个参数,过滤和验证怎么写法好?

  •  
  •   MaZiT · Feb 27, 2018 · 7576 views
    This topic created in 3174 days ago, the information mentioned may be changed or developed.

    用 thinkphp5.1 框架对接别人的系统,需要 40 个参数,过滤和验证、还要测试接口。怎么写比较好点。。。

    27 replies  •  2018-02-28 15:33:39 +08:00
    crazystory
    crazystory
    Feb 27, 2018
    1
    40 个???execuse 咪??
    killerv
    killerv
    Feb 27, 2018
    2
    需要那么多参数?
    keller
    keller
    Feb 27, 2018
    3
    👍
    chinvo
    chinvo
    Feb 27, 2018
    4
    这接口谁设计的,拖出去打死了
    SoulSleep
    SoulSleep
    Feb 27, 2018❤️1
    5
    一个 bean validator 一个参数。。
    喔。。。java 玩法,php 一定有。em !

    40 个参数,映射到一个 bean 上,继续 validator。。。。
    java 玩法。。。
    x86
    x86
    Feb 27, 2018
    6
    40 个参数...写的啥玩意
    MeteorCat
    MeteorCat
    Feb 27, 2018 via Android
    7
    吓尿了
    lauix
    lauix
    Feb 27, 2018❤️1
    8
    首先,这么多参数有点坑,不好维护,完全可以封装成 JSON 传递。

    可以采用 装饰器模式进行过滤验证,具体怎么写自己百度。
    mritd
    mritd
    Feb 27, 2018 via iPhone
    9
    啥,你再说一遍
    HYSS
    HYSS
    Feb 27, 2018
    10
    ```php

    $validatorRuleMap=[
    'name'=>'validatorName',
    'nickname'=>'validatorNickname',
    ];

    foreach ($validatorRuleMap as $rule){
    //取数据
    //验证
    }
    ```
    zjsxwc
    zjsxwc
    Feb 27, 2018
    11
    用表单校验相关的库就好了,这种情况大表单提交处理时很常见。

    http://symfony.com/doc/current/validation.html
    murmur
    murmur
    Feb 27, 2018
    12
    40 个参数如果只是格式校验还好 涉及到业务就自求多福吧
    hermanzhu
    hermanzhu
    Feb 27, 2018
    13
    40 个参数不建议流水账 foreach 调用 validator,这么些参数肯定能根据业务线进行分类,分好类再抽象出独立的 validator,造福后人……
    kisama12
    kisama12
    Feb 27, 2018 via Android
    14
    PHP 那么厉害的嘛……参数多于三个通常就封装起来了……
    manhere
    manhere
    Feb 27, 2018 via Android
    15
    tp 有验证器啊,看手册!
    abusizhishen
    abusizhishen
    Feb 27, 2018 via Android
    16
    参数归类,按类验证
    wwww961h
    wwww961h
    Feb 27, 2018
    17
    写成数组,可以用个二维的,同一类型的放在同一个二级数组里,然后循环来过滤,40 个参数真心有点多,
    dobelee
    dobelee
    Feb 27, 2018 via Android
    18
    什麼場景需要這麼多參數?為啥不用 json ?
    Junjunya
    Junjunya
    Feb 27, 2018
    19
    好奇楼上大佬们说的为啥不用 json ,用了 json 不还是一个 40 个值的 hashMap 么 和 php 直接 $_GET / $_POST 获取到 40 个值的数组 有啥不一样么
    murmur
    murmur
    Feb 27, 2018
    20
    @Junjunya json 对调试工具友好 传统 form 传个数组那个参数格式看着真心糟心
    MaZiT
    MaZiT
    OP
    Feb 28, 2018
    21
    @dobelee 是用 json 传递的
    MaZiT
    MaZiT
    OP
    Feb 28, 2018
    22
    @manhere tp5 验证器能验证数据类型,不能过滤一些非法参数吧 比如( html\sql 语句).
    MaZiT
    MaZiT
    OP
    Feb 28, 2018
    23
    @murmur 还真是全业务参数。。。
    ZXCDFGTYU
    ZXCDFGTYU
    Feb 28, 2018
    24
    @MaZiT 非法参数在 Request::instance()->get()/Request::instance()->post()的时候已经过滤了,验证器是验证参数完整性的。安全在调用 get()/post()的时候处理了
    NEETLEE
    NEETLEE
    Feb 28, 2018❤️1
    25
    thinkphp5 是有 validate 类的,你把你的校验规则按照[控制器名]=>[方法名=>[参数 1=>规则]]这样的结构写成数组存在 php 文件里,并且 rerurn 出来,然后 new 的时候需要验证的时候用 request 类可以拿到控制器名和方法名由此取到规则再传进去再验证就可以了。
    这样的写法把规则和代码分离开,参数再多也不会显得乱
    NEETLEE
    NEETLEE
    Feb 28, 2018
    26
    @NEETLEE new validate 的时候通过 request 类取到控制器名和方法名,由此拿到验证规则,再验证就 ok 了
    MaZiT
    MaZiT
    OP
    Feb 28, 2018
    27
    @ZXCDFGTYU 我记得$request->post()跟$request->param()的效果都是一样有过滤的,是吧?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2158 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    ♥ Do have faith in what you're doing.