如果没有传递值,或者值无效,如何拒绝访问该方法?

时间:2015-05-22 11:42:35

标签: php codeigniter oop model-view-controller

所以我在我用来编辑内容的控制器中有这个方法:

public function edit($id){
            $data;//some data that i gather
            $this->load->view('admin/layouts/main',$data);
        }
}

如果$id为空,我可以重定向,并显示一条消息,如下所示:

public function edit($id){
  if(empty($id)){
    redirect('admin/articles');
    //here some session variable to store message that i display later
  }
  $data;//some data that i gather
  $this->load->view('admin/layouts/main',$data);
}

例如,如果我尝试访问我的方法:host.com/controller/method/id,如果id为空,则会重定向我。

但是我如何检查我传递的id是否正确,并且我的数据库中有一篇真正的文章,其中有相应的id并且可以编辑?

P.S。我使用CodeIgniter作为框架。

3 个答案:

答案 0 :(得分:3)

你可以这样做,

public function edit($id = 0){
    // setting $id zero if not passed

    // check $id is integer and > 0
    ctype_digit($id) or redirect('admin/articles');

    // check record exists in your table 
    $result = $this->db->get_where('table', array('id' => $id));

    // $result will be false if no record found
    $result or redirect('admin/articles');

    $data = array();

    // if you need that in view
    $data['id']     = $id;
    $data['result'] = $result;

    $this->load->view('admin/layouts/main',$data);
}

答案 1 :(得分:1)

对于id,您始终可以使用is_integer函数。对于这篇文章,你所能做的只是尝试通过它的id来获取文章,如果你没有找到任何重定向。

答案 2 :(得分:1)

验证id的内容(即数字)后,您需要按id查询数据库。如果查询未返回任何内容,则表示id不在数据库中,您可以重定向到articles页面。