如何在CodeIgniter中使动态变量值全局化?

时间:2018-04-18 03:44:36

标签: php codeigniter codeigniter-3

如何创建一个始终在变化的全局变量?

我希望在protected $global_data; controller中创建类似Global_data.php的内容,可由许多控制器调用,并在$global_data时返回变量controller值} $this->load->library('../controllers/Global_data')

但是当我试图调用它时,它会给我出现此错误Unable to locate the specified class: Session.php,所以我认为CodeIgniter 3.1.8不允许我这样做。

那么如何实现我所寻找的目标呢?我是否需要将其放在model上,而不是library个文件,还是有其他方法可以执行此操作?

谢谢。

以下是Global_data.php内容

protected $global_data;

public function __construct()
{
    parent::__construct();

    $this->global_data = array(
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
    );
}

Can_be_anything_controller.php内容

class Can_be_anything_controller extends CI_Controller {
    public function __construct()
    {
        parent::__construct();

        $this->load->library('../controllers/Global_data');
    }

    public function index()
    {
        $data = $this->global_data;
        $data['page_title']     = 'Dashboard';
        $data['page_directory'] = 'pages/dashboard';
        $this->load->view('template', $data);
    }
}

3 个答案:

答案 0 :(得分:3)

您可以在<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="10dp" android:layout_alignParentBottom="true" android:orientation="horizontal" android:weightSum="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableTop="@drawable/ic_message" android:gravity="center" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="5dp" android:paddingBottom="5dp" android:textStyle="bold" android:textColor="#FFFFFF" android:background="#24edf1" android:text="Message" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".7" android:padding="5dp" android:textStyle="bold" android:textColor="#24edf1" android:background="#dedbdb" android:gravity="center" android:text="BUY" /> </LinearLayout> 目录

中为其创建一个库

libraries档案

Global_data.php

现在您可以在任何控制器中加载它,例如

class Global_data{
  public $global_data;

  protected $CI;

  public function __construct() {
    $this->CI = & get_instance();
  }

  public function common_data()
  {

    $this->global_data= array(
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
        'can_be_anything'    => 'can_be_anything',
    );
    return $this->global_data;
  }

 public function any_method(){
   $query = $this->CI->db->get('table_name');
 }
}

然后使用数据

$this->load->library('Global_data')

您也可以使用$data = $this->Global_data->common_data(); 模型在任何控制器中使用任何方法

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

答案 1 :(得分:2)

MY_Controller

中设置application/core/MY_Controller.php
class MY_Controller extends CI_Controller {

    public $global_data;

    public function __construct() {
        parent::__construct();
        $this->global_data = 'whateveryouwant';
    }

    public function somemethod() {
        return '123';
    }
}

然后application/controllers中需要访问global_data的任何其他控制器应该像这样扩展它:

class Somecontroller extends MY_Controller {

    public function index() {
         echo $this->global_data;
         echo $this->somemethod(); // works with methods too
    }

}

如果您需要运行更复杂的代码,只需将所有内容放入库或模型中并自动加载即可。所有public方法和属性都是全局可用的。 HMVC对你想要的东西来说似乎有些过分。

答案 2 :(得分:2)

配置文件也可以非常好地处理这种数据。

/application/config/global_data.php

<php

$config['foo'] = "some foo";
$config['bar'] = 42;
$config['baz'] = array('one', 'two', 'three');

在控制器中使用

加载配置文件
$this->config->load('global_data');

使用

访问项目
echo $this->config->item('foo');
echo $this->config->item('bar') * 2; //outputs 84
$data = $this->config->item('baz');

Config documentation