CodeIgniter POST/GET 默认值

Posted

技术标签:

【中文标题】CodeIgniter POST/GET 默认值【英文标题】:CodeIgniter POST/GET default value 【发布时间】:2015-04-21 17:26:24 【问题描述】:

如果 POST/GET 数据为空/假,我可以设置默认值吗,例如

$this->input->post("varname", "value-if-falsy")

?

所以我不必像这样编写代码

$a = $this->input->post("varname") ? 
     $this->input->post("varname") :
     "value-if-falsy"

【问题讨论】:

如果你想“value-if-falsy”为“”,那么它会自动完成 否则你可以这样做只是为了缩短, $a = $this->input->post("varname") ; $a=(empty($a))?"value-if-falsy":$a; 如果你将值保存到 db 你可以在那里设置默认值 【参考方案1】:

不久前才发现我也可以使用?:,例如。

$name = $this->input->post('name') ?: 'defaultvalue';

【讨论】:

我相信现在这应该是公认的答案。这是一种更简洁的方法,无需创建 MY_Input 类。 接受的正是我当时的想法,上面的这个答案(由我)是非常新的。所以我保留了旧的接受的答案以表示尊重和感激,尽管现在我总是使用这个:-)【参考方案2】:

您必须覆盖默认行为。

application/core 中创建MY_Input.php

class MY_Input extends CI_Input

    function post($index = NULL, $xss_clean = FALSE, $default_value = NULL)
    
        // Check if a field has been provided
        if ($index === NULL AND ! empty($_POST))
        
            $post = array();

            // Loop through the full _POST array and return it
            foreach (array_keys($_POST) as $key)
            
                $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
            

            return $post;
        

        $ret_val = $this->_fetch_from_array($_POST, $index, $xss_clean);
        if(!$ret_val)
            $ret_val = $default_value;

        return $ret_val;
    

然后在你的控制器中:

$this->input->post("varname", "", "value-if-falsy")

【讨论】:

我之前已经创建了自己的 MY_Input 类,以防没有内置的方法来解决这个问题。谢谢。 为什么要重写默认方法内容,不调用parent::post($index, $xss_clean) @fabsn 如果我可以这样说的话,只是为了教育目的。但是是的,你是绝对正确的,我们可以对parent::post() 进行测试,如果为 false,则返回默认参数。【参考方案3】:

它对我有用,我使用了@AdrienXL 技巧。

只需创建您的 application/core/MY_Input.php 文件并调用父方法(您可以在 CodeIgniter 系统文件夹 system/core/Input.php 中找到此方法:

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class MY_Input extends CI_Input

    function post($index = NULL, $default_value = NULL, $xss_clean = FALSE)
    
        $value = parent::post($index, $xss_clean);

        return ($value) ? $value : $default_value;
    

    function get($index = NULL, $default_value = NULL, $xss_clean = FALSE)
    
        $value = parent::get($index, $xss_clean);

        return ($value) ? $value : $default_value;
    

所以,当调用方法时,传递默认值:

$variable = $this->input->post("varname", "value-if-falsy");

【讨论】:

【参考方案4】:

您可以将代码块简化如下

public function post($index = NULL, $xss_clean = NULL, $default_value = NULL  )

    if( is_null( $value = $this->_fetch_from_array($_POST, $index, $xss_clean ) ) )
        return $default_value;
    
    return $value;

【讨论】:

【参考方案5】:

您可以在 set_rules 之前使用此代码

empty($_POST['varname']) ? $_POST['varname'] = 'value if empty' : 0;

【讨论】:

empty($_POST['varname']) AND $_POST['varname']="value if false 可以正常运行吗?

以上是关于CodeIgniter POST/GET 默认值的主要内容,如果未能解决你的问题,请参考以下文章

关于$.ajax()、$.get()、$.post()获取return值得问题

如何在Django中接收JSON格式的数据

httpie进行 api的POST GET 测试

django 获取 POST 请求值的几种方法

CodeIgniter - 如何将表单中的值发布为 NULL 而不是 0

codeigniter 从 url 获取值