当用户输入错误的参数时,将用户重定向到自制的404页面

时间:2016-03-31 14:37:17

标签: php codeigniter

我使用Codeigniter 3.0.6版,现在我有一个名为modifyfiles的控制器。该控制器的索引函数接受一个参数。

使用给定的参数,索引控制器将搜索模型中的所需数据。以下代码是我的索引函数:

public function index($id){

    $_SESSION['logged_in']['idmod'] = $id;
    $this->data['modullist']        = $this->__getmodulbyid($id);
    $this->data['lecturelist']      = $this->__getlecturelist();

    if(count($this->data['modullist']) <= 0){
        show_404();         
    } else {
        $this->load->view($this->layout, $this->data);
    }
}

现在效果非常好,当我尝试插入错误的数字参数时,它会将我引导到codeigniter内置的404页面。

但是当我尝试插入一些非数字参数时,比如一些字符,它会引导我进入我自己的404页面。

这是我的路由规则:

$route['404_override']              = 'home/pagemissing';
$route['dosen/modifymodul']         = 'dosen-tools/modifymodul';
$route['dosen/modifymodul/(:num)']  = 'dosen-tools/modifymodul/index/$1';

我想当用户输入错误的参数时,无论它们是数字还是字符,该函数都会重定向到我自己的404页面,而不是内置的页面。我怎样才能做到这一点?

我很确定问题出在我的条件块

if(count($this->data['modullist']) <= 0){
        show_404();         
} else {
        $this->load->view($this->layout, $this->data);
}

我应该写什么来替换show_404()?

或者,如果我没错,怎么能用404_override触发器替换show_404()?

解决了

我做了一些研究,最后在我的一个路由规则中创建了这个回调

$route['dosen/modifymodul/(:num)'] =  

function ($id){
   if(is_numeric($id)){
     return 'dosen-tools/modifymodul/index/'.$id;   
   } else {
     return 'home/pagemissing';
   }
};

谢谢大家

0 个答案:

没有答案