【问题标题】:Codeigniter libraries paramsCodeigniter 库参数
【发布时间】:2011-06-19 22:20:53
【问题描述】:

前段时间我向库中添加了一些参数,它工作得很好......我不知道我是否搞砸了一些配置设置或什么,现在我无法传递完全相同的参数。

库模板:

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Template {

        public $config = array();



        public function __construct($params = NULL)
        {   

                echo '<pre>'; print_r($params); echo '</pre>';
                /*This should print the array (and it's printing nothing):

                Array
                (
                     [menus] => Array
                       (
                            [Administradores] => index
                            [Logs] => logs
                       )

                )*/

            if ($params){
                foreach ($params as $key => $value){
                    $this->config[$key] = $value;
                }
            }

        }

        public function cms_template($pagina=NULL, $modulo=NULL, $titulo=NULL, $data=NULL, $dir='backoffice')
        {
            $CI =& get_instance();
            $CI->load->library('session');
            if (isset($this->config['menus']))
                $menus = $this->config['menus'];
            else
                $menus=NULL;

            $dados['dados'] = array(
                'id_administrador' => $CI->session->userdata('id_administrador'),
                'email' => $CI->session->userdata('email'),
                'nome' => $CI->session->userdata('nome'),
                'modulo' => $modulo,
                'titulo' => $titulo,
                'menus' => $menus
            );

            $CI->load->view($dir.'/topo', $dados);
            $CI->load->view($dir.'/'.$pagina, $data);
            $CI->load->view($dir.'/rodape');    
        }

控制器:

public function __construct() {
        parent::__construct();
        $this->auth_model->verificaLogin('id_administrador','backoffice/login');
        $this->load->model('administradores_model');
        $params=array(
            'menus' => array(
                'Administradores'=>'index',
                'Logs'=>'logs'
            )
        );

        $this->load->library('template', $params);
    }

当我运行它时,它会在视图上抛出一个错误:

<?php
            foreach ($dados['menus'] as $key => $value) {
                echo '<li>'.active_anchor('/'.$this->uri->segment(1).'/'.$this->uri->segment(2).'/'.$value, $key, '/'.$this->uri->uri_string()).'</li>';
            }
            ?>

遇到 PHP 错误

严重性:警告

消息:提供的参数无效 foreach()

【问题讨论】:

  • 你是对的,我没有注意到我使用了同一个词,但实际上它确实工作正常并且它不影响返回的数据,所以问题不存在。但谢谢你指出我。现在已经更正了。
  • 如果你只使用$dados['menus'] 而不是foreach($dados as $key=&gt;$value) 会发生什么?
  • 啊,没关系,别修了。现在尝试向该行添加一些跟踪:$menus=NULL;
  • $menus=NULL 可以变成$dados['menus']NULLforeach 中不起作用。请改用$menus=array()
  • 感谢大家的帮助。 Jorge:我在该数组中有更多数据,它会打印出应该显示的内容,但是 $data['menus'] 为空或为空。 hakre:这停止了错误,但它仍然是空的。我认为问题出在这一行:$this-&gt;load-&gt;library('template', $params); 无论我在 $params var 中传递什么,它都无法进入库。这很奇怪,因为我已经有几天没有碰过这段代码了,而且我很确定它曾经在某个时候工作过。我必须在其他文件中更改某些内容。有人知道吗?

标签: php class codeigniter


【解决方案1】:

关于您关于为什么自动加载此库会停止工作的最后评论!

这与 CodeIgniter 无关,而是 PHP 限制。可能有一个名字冲突! 我不确定,但请记住 PHP 有一个限制,你的类必须有一个唯一的名称。我不知道“模板”是否是 CI 保留名称,但请尝试使用不同的名称!如果是这种情况要解决它,你必须有一个好的命名方案,这就是 CI 使用后缀和前缀的原因。或者命名空间,但是 CI 不支持!

希望这个提示对您有所帮助!

【讨论】:

  • 嗨@heldrida 没有冲突。很简单:如果你想将参数传递给库,你不能自动加载它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 2011-03-29
  • 2014-02-07
  • 1970-01-01
  • 2012-12-20
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多