我有一个奇怪的问题。希望在我的代码中有一个简单的解释/一个简单的bug。
我的控制器中有methodA,需要来自url的3个参数。代码如下所示:
$data['listofpts'] = $this->sw_model->get_all_widgets($this->uri->segment(3),$this->uri->segment(4) );
$data['model'] = $this->uri->segment(4);
$data['ip'] = $this->uri->segment(3);
$data['objectid'] = $this->uri->segment(5);
$data['main_content']='allstats';
$this->load->view('includes/template', $data);
你可以看到我从网址中抓取了3个。 我有两个额外的方法(让我们称之为methodB和methodC)在同一个控制器中,两个方法完成后,调用methodA。但是,当这些其他方法调用methodA时,url看起来不同。具体而言,“objectid”变量可以是段6或7而不是段5.
这是调用methodA时URL的样子:
http://myserver/myapp/mycontroller/methodA/10.14.123.123/H8699A/417
以下是调用methodB时URL的示例:
http://myserver/myapp/mycontroller/methodB/10.14.3.44/H8699A/A14/417
我不确定这是不是好设计,但我决定更改methodA的签名,以便它接受一个代表段ID的数字。 所以从methodB,我可以做类似的事情:
$this->methodA(6);
问题/问题:有两件事我不明白。第一个问题是为什么新参数在您自己调用methodA时显示一个值。只要ivew“allstats”加载,它就会在新参数中显示一个值。从技术上讲,它应该是空的。我已经仔细检查以确保只有2个方法调用methodA。
其次,我不明白为什么当我转储参数的内容时,它显示的是IP地址,即uri段3.
到目前为止,methodA的新代码如下所示:
public function methodA($uriObjectid)
{
echo $uriObjectid;
$data['listofpts'] = $this->switches_model->get_all_widgets($this->uri->segment(3),$this->uri->segment(4) );
$data['model'] = $this->uri->segment(4);
$data['ip'] = $this->uri->segment(3);
$data['objectid'] = $this->uri->segment(5);
$data['main_content']='allstats';
$this->load->view('includes/template', $data);
}//end methodA
任何帮助将不胜感激。 谢谢。
编辑1
这就是我的控制器的样子:
public MyController扩展了CI_Controller {
public methodA($optionalparm)
{
//url looks like: http://myserver/myapp/thiscontroller/value1/valueformethodA
echo $optionalparm; //this is the variable that's problematic. it should be 3 or 4.
$valueformethodA = $this->uri->segment(2)
}
public methodB() {
//url looks like: http://myserver/myapp/thiscontroller/value1/value2/value3/valueformethodA
//call methodA
// $valueformethodA is now uri segment 4. pass that as argument
$this->methodA(4);
}
public methodC() {
//url looks like: http://myserver/myapp/thiscontroller/value1/value2/valueformethodA
//call methodA
// $valueformethodA is now uri segment 4. pass that as argument
$this->methodA(3);
}
}
答案 0 :(得分:0)
我没有100%关注你的问题,而且我不确定在调用methodB和methodC以及调用methodA之间url是如何变化的,除非你正在进行某种重定向。
如果我有这个网址
http://example.com/myController/methodB/segment3/segment4/segment5/segment6
我有这个控制器
public MyController extends CI_Controller {
public methodA() {
// the url should still be the same in here as it was in methodB unless a redirect was called.
}
public methodB() {
// call methodC
$this->methodC();
}
public methodC() {
// call methodA
$this->methodA();
}
}
在Codigniter中,如果我有一个从这样的URL调用的方法:
public testMethod($one, $two, $three) {
}
$one
始终为$this->uri->segment(3)
,$ 2始终为$this->uri->segment(4)
,$three
始终为$this->uri->segment(5)
; < / p>