Codeigniter具有为控制器内的函数传递url参数的语法。
如果是函数,例如:
function index($id){
$this->model->get_user($id);
}
假设在没有提供ID的情况下调用此函数,即调用
ProjectName/Controller/index
它会返回一个错误,因为它需要一个参数。 有没有办法检查参数是否存在。
答案 0 :(得分:1)
在控制器有机会运行代码之前,没有办法检查是否存在每个 - 因为该错误发生。即。在类方法执行之前。
那说有一个简单的解决方法:你可以提供一个默认值并检查它,例如
function index($id = null){
if( is_null($id) ){
///do something - like show a pretty error, or redirect etc...
}else{
$this->model->get_user($id);
}
}
这种方式当没有提供参数时,ID将为null,这是相当安全的(当使用null时),因为即使这样做也不能提供null作为url路径的一部分
www.mysite.com/index/null //or however the url works out in your case
将null作为字符串提供,因为url中的所有内容都以字符串形式出现。所以'null'
作为字符串实际上不是null
,它只是单词null。如果这是有道理的。因此,假设永远不会提供null
,只有在没有提供其他值时才会发生。
在这种情况下,可能值得将输入转换为int或进一步检查它是否是不正确的值。
这可以通过以下几种方式完成:
铸造:
function index($id = null){
if( is_null($id) ){
///do something - like show a pretty error, or redirect etc...
}else{
$this->model->get_user((int)$id);
//cast to int, things that are not INT or string equivalents become 0, which should not find a user as it would look for ID = 0
}
}
通过Regx检查:
function index($id = null){
if( is_null($id) ){
///do something - like show a pretty error, or redirect etc...
}else if( preg_match('/^[^\d]+$/', $id )){
// not an int ( contains anything other than a digit )
}else{
$this->model->get_user($id);
}
}
干杯。