CodeIgniter视图中的全局变量
下面我将使用CodeIgniter实现Basecamp风格的子域 基于调用的子域,数据库中的子域表返回对应于该子域的扩展名。比如说对于CodeIgniter视图中的全局变量,codeigniter,global-variables,Codeigniter,Global Variables,下面我将使用CodeIgniter实现Basecamp风格的子域 基于调用的子域,数据库中的子域表返回对应于该子域的扩展名。比如说对于stackoverflow.mywebsite.com,它将返回扩展名sf,整个网站使用的图像文件夹和CSS文件将根据此扩展名进行更改;例如,images\u-sf,style\u-sf.css,等等 现在,在M、V或C中获取此扩展的最佳方法是什么 选项: 饼干 动态设置CI配置变量 在MY_Controller中为此设置一个变量,并通过$this->任何地方访问
stackoverflow.mywebsite.com
,它将返回扩展名sf
,整个网站使用的图像文件夹和CSS文件将根据此扩展名进行更改;例如,images\u-sf
,style\u-sf.css
,等等
现在,在M、V或C中获取此扩展的最佳方法是什么
选项:
MY_Controller
中为此设置一个变量,并通过$this->
任何地方访问该变量感谢我个人,我会为您扩展的每个站点创建一个基本控制器,只需使用
$this->load->vars($data)
加载需要全局设置的信息
在特定基本控制器的构造函数中,只需像这样全局地将数据加载到视图中
$data->some_var = "some value";
$this->load->vars($data);
然后,在此控制器(或基本控制器)加载的所有视图中,您可以直接在视图中使用变量
$some\u var
。您最好的选择可能是选项3,将其放在基本控制器的构造函数中,可能是MY\u控制器或任何您正在扩展的控制器中(现在是CI2.0官方版本的CI_控制器)
然而,如果您所做的只是获取一个扩展名,那么可能没有理由拥有一个数据库表,因为您可以将它保存在一个配置文件中
我会这样做……在我的_Controller.php中(这是CI 2.0语法)
我必须从db获取它,因为有1000个子域在使用应用程序。因此,在配置中硬编码它们可能不是最好的…可能是动态设置配置项?或者使用php定义设置?不是通过php定义设置它们才是最好的方法吗?我确信一旦设置,它们在脚本执行期间将永远不会更改。你的问题可能有点错误领先,因为在标题中,您询问了CodeIgniter视图,但在问题中,您询问了如何将信息加载到所有M、V和C中。此方法将全局地将这些变量加载到此控制器加载的视图中。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
$subdomain_arr = explode('.', $_SERVER['HTTP_HOST'], 2);
$subdomain_name = $subdomain_arr[0];
$this->load->config('sub_prefix');
$pre_arr = $this->config->item('prefixes');
/* Check to make sure the subdomain name is in the config array */
$this->prefix = isset($pre_arr[$subdomain_name]) ? $pre_arr[$subdomain_name] : '';
}
<?php if (! defined('BASEPATH')) exit('No direct script access');
$config['prefixes'] = array('subdomain1' => 'sub1',
'stackoverflow' => 'sf');