2016-09-28 64 views
1

我是Codeigniter的新手。 我在我的数据库中有一个名为'sysConfig'的表,其中包含标题,货币单位,许可证密钥和...等列。从全局变量的数据库获取用户配置

我想把这个表记录(它只有一条记录)的第一行写到一个名为'$ Config'的全局变量中,它可以在所有视图中使用(如果它可能在模型和控制器中可用)。

编辑: 我可以从数据库中选择任何数据,我没有任何问题。我想在名为$ Config的变量中选择表sysConfig上的数据,并直接像这样访问它<?php echo $Config['Title']; ?><?php echo $Config -> Title; ?>

+1

在提出任何问题之前请阅读文档。例如,你可以通过这个http://www.codeigniter.com/userguide3/database/results.html –

+0

@ sayantan-das我可以从数据库中选择任何数据,我没有任何问题。我想在名为$ Config的变量中选择表sysConfig上的数据并直接访问它。 – 56356356356

+0

然后,你可以添加一个帮助文件,并在帮助器中写入一个函数,如'getConfig('config_name_here')',它将检索请求的配置值。现在,如果你自动加载你的自定义帮助器,该帮助器中的所有功能都可用在整个项目中。你可以像访问它一样,<?= getConfig('config_name')?> –

回答

0

如果这些是系统配置项目,最好的方法是将它们加载到您自己的配置文件中。

创建您自己的配置文件。手动加载或自动加载。在它

$this->config->load('filename'); 

Access项目中像这样

$this->config->item('item_name'); 

您也可以设置dynamicallly使用这个配置项:

$this->config->set_item('item_name', 'item_value'); 

您可以在文档这里读到它:http://www.codeigniter.com/user_guide/libraries/config.html

或者,如果这是基于用户的,则将信息收集到c urrent会话和访问。虽然访问模型或库中的会话变量不是一个好主意。您应该将所需的项目作为函数参数传递。

+0

感谢您的回复。我如何从数据库加载这些项目?因为每个用户都有自己的设置,所以我不能将它们保存在文件中。 – 56356356356

+0

对用户进行身份验证后,您可以将其设置为会话变量,只要会话保持不变,数据就可以访问。你可以在登录时做到这一点,例如$ _SESSION ['license'] = $ license,$ _SESSION ['something_else'] = $ something_else等。我建议你使用DB来存储会话。一旦存储,就可以随时直接访问会话变量$ _SESSION ['license']。 – PaulD

+0

个人而言,我将在授权过程(该用户已登录)内设置一个库调用,以获取user_id,然后通过user_id检查表以获取许可等,然后将该数据返回给控制器。然后控制器将所需的任何信息(如果有的话)作为参数发送给模型或库。我不会在模型本身内的会话或其他地方检查这些变量。这样,如果你的系统发生变化,你只需要在一个地方改变一件事情,而不是在多个地方改变多个功能。 – PaulD

0

一种方法是将属性添加到任何控制器,将需要数据的sysConfig。变量的名称不应该是$ config,因为CI已经使用该符号 - 它由Config类定义和设置。所以对于这个答案我会用$sysConfig

class Some_controller extends CI_Controller 
{ 
    protected $sysConfig; //class property with scope to this controller 

    public function __construct() 
    { 
    parent :: __construct(); 
    $this->load->model('sysConfig_model'); 
    } 

sysConfig_model(未显示)管理您似乎已建立的表格。由于您没有向我们展示任何代码,因此我正在为该模型编写函数。模型功能get($id)根据$id检索所需的“用户”,并返回数组中的数据。 ($id的设定值没有显示。)

控制器可以按照需要通过$this->sysConfig使用该属性,就像在这个公认的微不足道的控制器功能中一样。

类定义继续...

public function format_title() 
    { 
    if(isset($this->sysConfig){ 
     $this->sysConfig['suckup'] = "the most highly regarded " 
     . $this->sysConfig['title'] 
     . " in the world visit our site!"; 
    } 
    } 

其实对于$this->sysConfig分配一个值发生在这个代码下位。在此示例中,控制器的index()函数可以接收一个参数,该参数是我们想要从数据库中获取的用户的“ID”。

public function index($id = NULL) 
    { 
    //assign data to the class property $sysConfig from the model 
    $this->sysConfig = $this->sysConfig_model->get($id); 

该属性可以很容易地传递给视图。首先我们做一些吸吮。

 $this->format_title(); 
    $data['userStuff'] = $this->sysConfig; 
    $this->load->view('some_view', $data); 
    } //end of index() 

} //end of class Some_controller 

some_view.php

<div> 
    <h4>Welcome <?php echo $userStuff['firstName']. " " . $userStuff['lastName']; ?></h4> 
    <p>I cannot say how swell it is to have <?php echo $userStuff['suckup']; ?></p> 
</div> 

的 “全球性” 的想法实在是违背OOP方法在PHP - 或任何其他OOP语言。