0

我开始学习 codeigniters 活动记录,我正在使用从控制器传递到模型的参数查询我的数据库。

首先,我将 id 从控制器传递给模型并且有效。

控制器

function bret($id){
$this->load->model('school_model');
$data = $this->school_model->get_city_and_population($id);
foreach ($data as $row)
{
echo "<b>Name Of The City</b>...........". $row['Name'];
echo "<br/>";
echo "<b>Total Population</b>...........".$row['Population'];
}
}

模型

function get_city_and_population($id){
$this->db->select('Name,Population');
$query = $this->db->get_where('city', array('ID'=>$id));
return $query->result_array();
}

我继续输入多个预期会失败的参数,但这有效,但我不太确定它为什么有效或什么有效。

控制器

public function parameters($id,$name,$district){
    $this->load->model('school_model');
    $data = $this->school_model->multiple_parameters($id,$name,$district);
    foreach ($data as $row)
    {
    echo "<b>Total Population</b>...........".$row['Population'];
    }
    }

模型

function multiple_parameters($id,$name,$district){
$this->db->select('Population');
$query = $this->db->get_where('city', array('ID'=>$id,'Name'=>$name,'District'=>$district));
return $query->result_array();
}

在我访问的多个参数示例中http://example.com/env/at/index.php/frontpage/parameters/7/Haag/Zuid-Holland/

在这里,我知道名字 Haag在 id7和地区是Zuid-Holland

这是我的问题。codeigniter 如何知道如何将参数从 url 传递给模型,其次,如果我有点错误7/Haag/Zuid-Hollandes/,我将如何向用户显示,该 url 是错误的并回退到默认值参数错误时显示空白?

4

2 回答 2

4
//In codeiginter URI contains more then two segments they will be passed to your function as parameters.
//if Url: http://example.com/env/at/index.php/frontpage/parameters/7/Haag/Zuid-Holland/

//Controller: forntpage
public function parameters($id,$name,$district){
   echo $id.'-'$name.'-'.$district;
}

//and if you are manually getting url from segment & want to set default value instead of blank then use following:



public function parameters(
$this->load->helper("helper");
$variable=$this->uri->segment(segment_no,default value);
//$id=$this->uri->segment(3,0);
}

//or
 //Controller: forntpage
 public function parameters($id='defaultvalue',$name='defaultvalue',$district='defaultvalue'){
   echo $id.'-'$name.'-'.$district;
}
于 2013-07-06T09:15:00.983 回答
1

这只是 CI 中的简单 uri 映射,或者如果您愿意,可以绑定 uri 参数。
当你有这样的方法时:

public function something($param1, $param2) {
    // get from: controller/something/first-param/second-param
}

这意味着您的 uri 段作为参数传递给您的控制器方法。

上面的方法可以写成:

public function something() {
    $param1 = $this->uri->segment(3);
    $param2 = $this->uri->segment(4);
    // segment 1 is the controller, segment 2 is the action/method.
}

您需要了解您必须手动检查 uri 段是否正是您想要的,因为 CI 除了此映射之外不做任何其他事情。

接下来,如果你想有一些默认值,下面的陈述是正确的:

public function something($param1 = 'some default value', $param2 = 'other value') {
// get from: controller/something/first-param/second-param
}

也就是说,如果像:这样的 url/controller/something被传递,你仍然会得到你的默认值。传递时controller/something/test,您的第一个参数将被 url 中的参数覆盖(测试)。

差不多就是这样。

于 2013-07-06T09:21:56.623 回答