[英]Codeigniter Router $this->uri->segment not working exactly
[英]CodeIgniter - $this->uri->segment() returns empty
我试图使CodeIgniter日历库正常工作,为此,至少根据文档,我需要使用$this->uri->segment()
。 压延机的URL如下所示:
据我所知,这意味着$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');
}
谁能告诉我我哪里失败了? 我一遍又一遍地阅读文档,并检查了我的代码,但是我看不出他们的示例有什么不同?
UPDATE
我想我已经排除了问题与$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';
为此,您必须使用base_url()
来加载Codeigniter url帮助器。 您可以通过运行$this->load->helper('url');
来完成此操作$this->load->helper('url');
或转到您的autoload.php并将其放在helper
好的,这里的问题不是您的URI类。 问题是您试图在视图中使用$this->uri->segment()
。 这不是您应该这样做的方式。 您只应在控制器内部使用它。 要解决此问题,您有两个选择,您可以将年和月作为参数传递给控制器方法,也可以在控制器内部使用uri-> segment。
示例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);
如果尝试回声会得到什么
"Selected year: ".$this->uri->segment(1)." and month: ".$this->uri->segment(2);
我很确定该索引是相对的,基于routes.php
配置中的default_controller
路径设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.