【问题标题】:CodeIgniter global variableCodeIgniter 全局变量
【发布时间】:2013-01-11 16:18:13
【问题描述】:

我在所有视图中都使用 $data $this->load->view('my_view', $data);

我还按照本指南Extending Core Controller自动加载控制器

但我想让 $data 全局化,因为在views 中有一个侧边栏,它对于整个项目都是不变的,并显示通过自动加载控制器中的 db 获取的信息

目前我必须为每个手动编写 $data['todo'] 并从自动加载的 model 中获取信息。

谢谢。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    1:在application/libraries 中创建MY_Controller,如下:

    class MY_Controller extends Controller {  
      var $data;      
      //constructor function              
    }
    

    2:将所有控制器文件中的Controller 替换为MY_Controller,并使用$this->data 加载视图

    class Contact extends Controller { //to.. } 
    
    class Contact extends MY_Controller { 
     $this->load->view('contact_view', $this->data);
    }
    

    这样您就可以在MY_Controller 中执行适用于整个站点的默认功能,例如加载设置。

    【讨论】:

    • 如果不行,那就试试把 MY_Controller.php info application/core 改成什么前缀,那么一定要在 config.php @$config['subclass_prefix' ]
    【解决方案2】:

    我今天早些时候遇到了类似的问题。我发现一种比全局变量更简单的方法是使用常量。您可以定义一个常量文件,该文件将从您的 index.php 文件中加载:

    // Include additional constants
    $defines_file = 'includes/defines.php';
    if (file_exists($defines_file))
    {
        require_once($defines_file);
    } 
    

    然后您可以将常量添加到defines.php 文件中:

    define(MY_CONSTANT,'my constant info');
    

    这样它们就可以在整个系统的任何文件中直接使用:echo MY_CONSTANT;,或者您可以将它们分配给变量。

    我认为这种方式对我来说更容易,因为当/如果我需要更改常量时,我​​只有一个位置可以去。

    更多:http://codeigniter.com/forums/viewthread/56981/#280205

    【讨论】:

    • 这是个好主意,我已经在使用所有常量值,但这不适合我,因为我从 db 获取的数据每次都不同。使用另一个包含脚本不会让我使用内置的 CI 数据库库,所以我不得不这样做
    【解决方案3】:

    我使用辅助函数来调用全局函数!

    例如。

    function get_user($userid){
        $CI =& get_instance();
    
        $query = $CI->db->get_where('users', array('id' => $userid), 1, 0);
        foreach ($query->result() as $row){
            // Return a object with userdata!
            return $row;
        }
    }
    

    现在我可以在任何地方访问我的用户数据了..

    【讨论】:

      【解决方案4】:

      我建议不要让视图数据全局化,而是使用HMVC 构建一个模块来生成这个侧边栏视图。 HMVC 是一种非常简洁的编码部分视图的方法。

      【讨论】:

      • 当您谈论像局部视图这样简单的事情时,HVMC 是多余的。如果您有一个变化不大的局部视图,只需将视图加载到常量本身:define('MY_VIEW', $this->load->view('my_view', '', TRUE)); - 然后只需在大视图中回显 MY_VIEW 常量。 HVMC 为这样简单的事情增加了很多包袱。
      • 在代码中的什么位置加载渲染局部视图所需的数据?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多