我有一个包含第一个网址段的变量。我希望将其用作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上面的代码,而不是在我的所有控制器中?如果是的话我应该把它放在哪里?
答案 0 :(得分: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 $data
添加到MY_Controller
。
答案 1 :(得分: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;
这有帮助吗?