CodeIgniter - $ this-> uri-> segment()返回空

时间:2015-02-26 13:01:56

标签: php codeigniter calendar

我想让CodeIgniter calender library工作,为此,我需要使用$this->uri->segment(),至少根据文档。压延机的网址如下所示:

  

http://www.example.com/index.php/tasks/calendar/2015/03

根据我的理解,这意味着$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';

3 个答案:

答案 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路径设置。