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

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

  •  
  •   MaZiT · 2018-02-27 17:47:00 +08:00 · 6191 次点击
    这是一个创建于 2460 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    可以采用 装饰器模式进行过滤验证,具体怎么写自己百度。
    mritd
        9
    mritd  
       2018-02-27 19:33:01 +08:00 via iPhone
    啥,你再说一遍
    HYSS
        10
    HYSS  
       2018-02-27 19:35:40 +08:00
    ```php

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

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

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