繁体   English   中英

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

[英]CodeIgniter - $this->uri->segment() returns empty

我试图使CodeIgniter日历库正常工作,为此,至少根据文档,我需要使用$this->uri->segment() 压延机的URL如下所示:

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');
}

谁能告诉我我哪里失败了? 我一遍又一遍地阅读文档,并检查了我的代码,但是我看不出他们的示例有什么不同?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM