CodeIgniter将新值推送到配置文件的数组中

时间:2013-07-08 14:09:42

标签: php codeigniter multidimensional-array

我可能在PHP中遗漏了一些知识,似乎无法使其正常工作。

我有application/config/cfg.backend.php这个值:

$config['head_meta']            = array(
    'stylesheets'               => array(
        'template.css'
    ),
    'scripts'                   => array(
        'plugins/jquery-2.0.3.min.js',
        'plugins/bootstrap.min.js'
    ),
    'end_scripts'               => array(
        'plugins/jquery-ui.js',
        'plugins/jquery.dataTables.min.js',
        'template.js'
    )
);

我加载了所有必要的脚本和css文件,因此每当我需要扩展其中一些数组时,我只需使用array_push()函数,就像我在application/controllers/backend/Categories.php中所做的那样:

class Categories extends Backend_Controller{

    function __construct(){

        parent::__construct();

        // Load dependencies
        $head_meta = config_item('head_meta');
        array_push($head_meta['end_scripts'], 'plugins/redactor.min.js', 'categories.js');
        array_push($head_meta['stylesheets'], 'redactor.css');
        var_dump($head_meta['end_scripts']);
    }

    // THE REST OF THE CLASS ...
}

通过做var_dump($head_meta['end_scripts']),我看到array_push()完成了他的工作,但我的脚本没有加载,我不知道为什么,我被困在这里。

array (size=5)
  0 => string 'plugins/jquery-ui.js' (length=20)
  1 => string 'plugins/jquery.dataTables.min.js' (length=32)
  2 => string 'template.js' (length=11)
  3 => string 'plugins/redactor.min.js' (length=23)
  4 => string 'categories.js' (length=13)

有什么建议我做错了吗?

====更新====

我有一个位于applications/views/backend/templates/template.php的主模板文件,我在页面底部foreach()加载end_scripts

<?php foreach($this->config->item('end_scripts', 'head_meta') as $end_scripts):?>
    <script src="<?php echo base_url();?>assets/js/<?php echo $end_scripts;?>" type="text/javascript"></script>
<?php endforeach;?>

要将特定视图加载到主templates/template.php,我执行此操作:

    // Insert catched data into the component view of main template
    $data['component'] = $this->load->view('backend/category_list', $componentData, TRUE);

    // Load a component view into the main template
    $this->load->view('backend/templates/template', $data);

1 个答案:

答案 0 :(得分:1)

Codeigniter Config类在类中加载配置变量,使它们不可变,而不调用$this->config->set_item()。要从控制器向config类中的数组添加变量,需要修改数组,然后将变量设置回config类,然后才能从程序的其他位置访问它们。

class Categories extends Backend_Controller{

    function __construct(){

        parent::__construct();

        // Load dependencies
        $head_meta = config_item('head_meta');
        array_push($head_meta['end_scripts'], 'plugins/redactor.min.js', 'categories.js');
        array_push($head_meta['stylesheets'], 'redactor.css');
        $this->config->set_item('head_meta', $head_meta);
        var_dump($this->config->get_item('head_meta'));
    }

    // THE REST OF THE CLASS ...
}