codeigniter中所有视图的可用数据

use*_*460 16 codeigniter

我有一个变量,包含应该存在于整个网站中的数据.我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图.

钯.将此数据存储为会话变量/ ci会话cookie不是一种选择.

非常感谢.

Mud*_*ark 24

创建一个MY_Controller.php文件并将其保存在application/core文件夹中.在其中,类似于:

class MY_Controller extends CI_Controller {

   public $site_data;

   function __construct() {
       parent::__construct();
       $this->site_data = array('key' => 'value');
   }
}
Run Code Online (Sandbox Code Playgroud)

$this->site_data现在可以在整个控制器中查看视图.请注意,为此,所有其他控制器都需要扩展MY_Controller而不是CI_Controller.


Aur*_*rel 16

您需要扩展CI_Controller以创建基本控制器:

https://www.codeigniter.com/user_guide/general/core_classes.html

核心/ MY_Controller.php

<?php

class MY_Controller extend CI_Controller {

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

         //get your data
         $global_data = array('some_var'=>'some_data');

         //Send the data into the current view
         //http://ellislab.com/codeigniter/user-guide/libraries/loader.html
         $this->load->vars($global_data);

     }  
}
Run Code Online (Sandbox Code Playgroud)

控制器/的welcome.php

 class Welcome extend MY_Controller {
      public function index() {
          $this->load->view('welcome');
      }
 }
Run Code Online (Sandbox Code Playgroud)

意见/的welcome.php

var_dump($some_var);

注意:要在函数或控制器中获取此变量,您可以使用 $this->load->get_var('some_var')


小智 5

application / config / autoload.php中设置

$autoload['libraries'] = array('config_loader');
Run Code Online (Sandbox Code Playgroud)

创建应用程序/库/Config_loader.php

defined('BASEPATH') OR exit('No direct script access allowed.');

class Config_loader
{
    protected $CI;

    public function __construct()
    {
        $this->CI =& get_instance(); //read manual: create libraries

        $dataX = array(); // set here all your vars to views

        $dataX['titlePage'] = 'my app title';
        $dataX['urlAssets'] = base_url().'assets/';
        $dataX['urlBootstrap'] = $dataX['urlAssets'].'bootstrap-3.3.5-dist/';

        $this->CI->load->vars($dataX);
    }
}
Run Code Online (Sandbox Code Playgroud)

在你看来

<title><?php echo $titlePage; ?></title>
<!-- Bootstrap core CSS -->
<link href="<?php echo $urlBootstrap; ?>css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap theme -->
<link href="<?php echo $urlBootstrap; ?>css/bootstrap-theme.min.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)