您好我想向CI_Controllers的所有实例添加一个公共变量($ this-> data []),这样我就可以存储一些基本规则来输出页面(css / js等)然后有每个控制器附加到此数组以添加其自己的要求(更多css / js)。我有一个带有自定义视图函数的核心库,它接收这些数组并将它们注入页面模板的head标记。
我想到的选项;
编辑CI_Controller并将其添加到那里......猜测这是一个坏主意。
创建一个扩展CI_Controller的shell控制器,将var添加到该控制器,然后让其他所有控制器扩展shell控制器。
还有其他聪明的方法吗?
我只使用CI大约一个月了,我试过阅读文档,但我找不到任何内置的方法来做这样的事情?有没有人遇到过这个问题,如果有的话你是怎么解决的?
谢谢!
[edit]使用PHP 5.3.x [/ edit]
答案 0 :(得分:2)
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
您可以扩展CI_Controller
以获得所需的功能。
应用/核心/ MY_Controller.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function my_function()
{
return "Cool return from my_function";
}
}
控制器/的welcome.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends MY_Controller {
public function index()
{
echo $this->my_function();//echo's "Cool return from my_function"
}
}
您只需在MY_Controller
中定义所需的功能即可。然后在您的控制器中,使用extends MY_Controller
而不是extends CI_Controller
,您可以在这些控制器内的任何位置调用函数。
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以创建自己的基本控制器文件,以继承\ application \ core \ MY_Controller.php中的基本页面加载方法:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
}
protected function loadPage($path, $data = array())
{
$this->load->view('common/head'); // Assuming you will use a folder for page parts
$this->load->view($path, $data);
$this->load->view('common/foot');
}
}
然后在您的页面控制器中,您可以更轻松地调用相同的方法:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class User extends MY_Controller {
public function index()
{
$data = array(); // get data from model
$this->loadPage('user/view', $data); // Assuming you will use folders for sets of views
}
public function edit()
{
$data = array(); // get data from model
$this->loadPage('user/edit', $data);
}
}