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值得问题