我想让CodeIgniter calender library工作,为此,我需要使用$this->uri->segment()
,至少根据文档。压延机的网址如下所示:
根据我的理解,这意味着$this->uri->segment(3
)将是年份,$this->uri->segment(4)
是月份。但是,这两个都没有返回任何内容,这是我的日历页面的代码:
echo "Selected year: ".$this->uri->segment(3)." and month: ".$this->uri->segment(4);
echo $this->calendar->generate($this->uri->segment(3), $this->uri->segment(4));
第一行仅用于调试目的,并确认没有任何命令返回任何输出。日历库在控制器中加载,代码如下:
public function calendar() {
// Calender configuration (must be done prior to loading the library
$conf = array(
'start_day' => 'monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'index.php/tasks/calendar'
);
// Load libraries and helpers
$this->load->library('calendar',$conf);
// Show page, including header and footer
$this->load->view('templates/header', $data);
$this->load->view('tasks/calendar', $data);
$this->load->view('templates/footer');
}
谁能告诉我我失败的地方?我一遍又一遍地阅读文档,并检查了我的代码,但我看不出我的做法与他们的例子有什么不同?
更新
我想我已经排除了问题与$this->uri->section()
功能有关。当在... / tasks / calendar /(...)之后将其他部分添加到URL时,可能与控制器加载不正确的页面有关。我仍然没有找到解决方案,但我想让你知道,以防其他人阅读此内容有同样的问题。
更新2
我认为这可能是一个路由问题,routes.php看起来像这样,任何与任务相关的事情:
$route['tasks/create'] = 'tasks/create';
$route['tasks/calendar/(:num)/(:num)'] = 'tasks/calendar/$1/$2';
$route['tasks/calendar'] = 'tasks/calendar';
$route['tasks'] = 'tasks';
$route['tasks/(:any)'] = 'tasks/view/$1';
答案 0 :(得分:3)
要使用此功能,您必须加载Codeigniter网址助手,因为您使用的是base_url()
。您可以通过运行此$this->load->helper('url');
或转到autoload.php并将其放在helper
答案 1 :(得分:1)
好的,这里的问题不是你的URI类。问题是您尝试在视图中使用$this->uri->segment()
。这不是你应该怎么做的。您应该只在控制器内使用它。要解决此问题,您有两种选择,您可以将年份和月份作为参数传递给控制器方法,也可以使用控制器内的uri->段。
示例1:将年份和月份作为参数传递
网址:index.php/tasks/calendar/2015/03
控制器:
class Tasks extends MY_Controller {
public function calendar($year, $month){
$conf = array(
'start_day' => 'monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'index.php/tasks/calendar'
);
$this->load->library('calendar',$conf);
$data = array(
"year" => $year,
"month" => $month
);
$this->load->view('tasks/calendar', $data);
}
}
查看:
echo "Selected year: $year and month: $month";
echo $this->calendar->generate($year, $month);
示例2:使用$this->uri
网址:index.php/tasks/calendar/2015/03
控制器:
class Tasks extends MY_Controller {
public function calendar(){
$conf = array(
'start_day' => 'monday',
'show_next_prev' => true,
'next_prev_url' => base_url() . 'index.php/tasks/calendar'
);
$this->load->library('calendar',$conf);
$data = array(
"year" => $this->uri->segment(3),
"month" => $this->uri->segment(4)
);
$this->load->view('tasks/calendar', $data);
}
}
查看:
echo "Selected year: $year and month: $month";
echo $this->calendar->generate($year, $month);
答案 2 :(得分:0)
如果你尝试使用echo
,你会得到什么?"Selected year: ".$this->uri->segment(1)." and month: ".$this->uri->segment(2);
我很确定索引是相对的,基于default_controller
配置中的routes.php
路径设置。