0

我有一个具有第一个 URL 段的变量。我想把它用作body标签上的一个类。它将主要用于将我的导航中的链接设置为处于活动状态。有没有一种方法可以在一个地方创建这个变量并在我的所有控制器中使用它?在我所有的控制器中设置它并不是什么大问题,但我想保持我的代码尽可能干净。这就是我现在控制器中的内容:

$url_segment = $this->uri->rsegment_array(); //get array of url segment strings
$data['url_segment'] = $url_segment[1]; //gets string of first url segment

有没有办法只在我的应用程序中使用 ONCE 上面的代码,而不是在我的所有控制器中?如果是这样我应该把它放在哪里?

4

2 回答 2

3

我会扩展CI_Controller一个包含该变量的自定义子类,然后让所有实际的控制器扩展它。CodeIgniter 让它变得简单 - 只需创建 application/core/MY_Controller.php 包含以下内容:

class MY_Controller extends CI_Controller {
    private $cached_url_seg;
    function MY_Controller() {
        parent::construct();
        $url_segment = $this->uri->rsegment_array(); //get array of url segment strings
        $this->cached_url_seg = $url_segment[1]; //gets string of first url segment
    }
}

然后将您的控制器更改为扩展MY_Controller.

您仍然必须将其添加到每个单独控制器中的 $data 中,但我想如果您愿意,您也可以添加private $dataMY_Controller.

于 2013-06-27T17:43:42.150 回答
1

您可能需要考虑制作一个 1 时间库文件,其中包含您希望全局访问的所有功能,然后在您的 autoload.php 中添加此库,以便它自动初始化..

class my_global_lib {

  protected $CI;
  public $segment;

  public function __construct(){
    parent::__construct();
    $this->CI =& get_instance(); 

    // Do your code here like:
    $this->segment = $this->CI->uri->segment(1);

    // Any other things you want to have accessable by default could go here

  }

}

这将允许您像这样从控制器调用它

echo $this->my_global_lib->segment;

这有帮助吗?

于 2013-06-27T18:51:38.640 回答