检查是否使用参数

时间:2017-10-04 02:20:26

标签: php codeigniter codeigniter-3

Codeigniter具有为控制器内的函数传递url参数的语法。

如果是函数,例如:

function index($id){
     $this->model->get_user($id);
}

假设在没有提供ID的情况下调用此函数,即调用

ProjectName/Controller/index

它会返回一个错误,因为它需要一个参数。 有没有办法检查参数是否存在。

1 个答案:

答案 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);
     }
}

干杯。