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

请教 CI 如何针对同一个 uri 的 get 和 post 请求做不同处理

  •  
  •   sensui7 · 2016-01-16 16:51:24 +08:00 · 4091 次点击
    这是一个创建于 3218 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如说 auth/login 这个 uri, 如果是 get 则显示登录表单, 如果 post 则发送登录信息.

    之前我是 post 到另一个 uri 上, 比如 form action = "auth/post_login", 但是这样的话, 当验证没通过, 需要重新填充表单时, url 就变成 post_login 了, 如果重定向回去, 那么 set_value 又用不了.

    我用的 CI 2.x, 这个问题请问一般如何处理的.
    18 条回复    2016-01-17 16:52:59 +08:00
    XianZaiZhuCe
        1
    XianZaiZhuCe  
       2016-01-16 17:00:26 +08:00 via iPhone
    判断是 get 还是 post ,然后输出不同的 view ?
    abelyao
        2
    abelyao  
       2016-01-16 17:10:56 +08:00   ❤️ 1
    CI 3.x 有个 $this->input->method() 函数,可以获得当前请求的类型,在 2.x 中好像没有…
    minuux
        3
    minuux  
       2016-01-16 17:23:11 +08:00   ❤️ 1
    不知道 CI2.X 是否有这个配置, 3.0 的话你可以在 config/router.php 中设置

    $route['auth/login']['get'] = 'auth/login';
    $route['auth/login']['post'] = 'auth/post_login';
    lmfx89
        4
    lmfx89  
       2016-01-16 17:34:02 +08:00
    if (empyt($this->input->post()) {
    } else {
    }
    Raidal
        5
    Raidal  
       2016-01-16 18:15:18 +08:00
    sensui7
        6
    sensui7  
    OP
       2016-01-16 18:20:54 +08:00
    @Raidal 这个要求是 ci 3, 话说要是 ci 3 的话, 直接用
    @minuux 的方法就行了.

    我现在直接保存变量,再往 views 传变量了. 也好使.
    chaegumi
        7
    chaegumi  
       2016-01-16 19:02:56 +08:00
    if(strtolower($_SERVER['REQUEST_METHOD'])==='post'){
    // post
    }else{
    // get
    }
    sensui7
        8
    sensui7  
    OP
       2016-01-16 19:12:38 +08:00
    @chaegumi 这类变量我都不碰, 感觉坑多...
    stellar
        9
    stellar  
       2016-01-16 19:53:58 +08:00
    realpg
        10
    realpg  
       2016-01-16 22:57:46 +08:00
    route 里面可以配
    在 controller 里也可以读取 method
    甚至可以用 post 取值判断是否有值来判定当前是不是 post
    Jaylee
        11
    Jaylee  
       2016-01-16 23:02:49 +08:00
    可以在_remap()中判断呀
    db520
        12
    db520  
       2016-01-16 23:14:22 +08:00 via Android
    @sensui7 php 内置变量怎么就坑了?为什么要拘泥于框架
    sensui7
        13
    sensui7  
    OP
       2016-01-16 23:34:00 +08:00 via iPhone
    @db520 我没有说这个变量不好,完全没有那个意思。我是说这个变量中很多属性不是服务端控制的,使用时需要考虑的完善一点。
    有简单的方法时,我倾向不用他,省去很多麻烦。
    realpg
        14
    realpg  
       2016-01-17 01:46:45 +08:00
    @db520
    因为有些框架会 unset 、 rewrite 系统全局变量什么的。
    比如, CI 就可以配置成自动销毁$_GET , PHP 并不阻止任何针对映射进来的全局变量的顶层二次操作
    依托框架写的程序,只要框架没移除支持,用框架的方法才能保证兼容性
    sensui7
        15
    sensui7  
    OP
       2016-01-17 01:53:00 +08:00
    @realpg 您考虑的很周全, 多谢了。
    chaegumi
        16
    chaegumi  
       2016-01-17 07:44:00 +08:00
    @realpg
    @sensui7

    趋势懂吗, codeigniter 很多以前的函数,虽然保留了,但是新版的都改写成直接调用 php 内置的函数了。学习了框架后连 php 本身的东西都不会了,算什么
    db520
        17
    db520  
       2016-01-17 16:50:33 +08:00 via Android
    @sensui7 框架应该也是读的这个内置变量啊,我就怕你框架用多了,忘记了 php 自身基本的东西。
    db520
        18
    db520  
       2016-01-17 16:52:59 +08:00 via Android
    @realpg 如果是为了兼容性可以理解。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4886 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.