2016-07-20 76 views
1

我正在一个网站,我必须保存一个全局变量。Codeigniter:使用静态变量

我使用的这个人代码globals_helper.php custom global variable class

但我总是得到静态变量null值。

globals_helper.php:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

// Application specific global variables 
class Globals 
{ 
private static $authenticatedMemberId = null; 
private static $initialized = false; 

private static function initialize() 
{ 
    if (self::$initialized) 
     return; 

    self::$authenticatedMemberId = null; 
    self::$initialized = true; 
} 

public static function setAuthenticatedMemeberId($memberId) 
{ 
    self::initialize(); 
    self::$authenticatedMemberId = $memberId; 
} 


public static function authenticatedMemeberId() 
{ 
    self::initialize(); 
    return self::$authenticatedMemberId; 
} 
} 

我所做的一切就像在帮助文件夹和更新自动加载的文件添加globals_helper.php的步骤。现在,我想自定义库“Ctrl_utility”功能“get_search_term”访问这些静态变量和我的控制器调用get_search_term功能

Ctrl_utility.php

class Ctrl_utility { 
protected $CI; 
public static $static_search = ""; 


public function __construct() 
{ 
    // Assign the CodeIgniter super-object 
    $this->CI =& get_instance(); 

} 

public function get_search_term($searchTerm){ 

    $searchTerm = $this->CI->security->xss_clean(htmlspecialchars($searchTerm)); 

    if (isset($searchTerm) && strlen($searchTerm)>0) { 
     Globals::setAuthenticatedMemeberId($searchTerm); 
    } else { 
     $searchTerm = Globals::authenticatedMemeberId(); 
    } 
    return $searchTerm; 
} 

我的一个控制器,它们都具有类ctrl_utility ,get_search_term函数:

class Blog_controller extends CI_Controller{ 

public function __construct() { 

    parent::__construct(); 

    $this->load->model('blogs_model'); 
} 

public function index(){ 


    //Get SearchTerm Values 
    $searchTerm = $this->ctrl_utility->get_search_term($this->input->post('searchTerm')); 

    //Get Url First Parameter 
    $start = $this->ctrl_utility->get_url_first_parameter(); 

    // Get Data from solr 
    $rows = 10; 
    $data = $this->blogs_model->solrData($start, $rows, $searchTerm); //give start of documents 

    //Pagination 
    $this->pagination->initialize($this->ctrl_utility->pagination_config($this->uri->segment(1), $rows, $data['found'])); 

    //Views 
    $this->load->view('tabs/blogs', $data); 


} 
} 

我做错了什么?

+0

你在这里遇到什么错误? –

+0

当我通过按钮从一个控制器跳转到另一个控制器时,我通过调用类Ctrl_utility get_search_term($ searchTerm)函数没有获得静态变量值。 – MTA

回答

0

现在谈到在CodeIgniter中定义它们时,有几种方法。我在下面列出了其中的一些:

  1. 在应用程序/库中创建属于自己的文件,其中类构造函数包含一个数组作为参数。现在在/ application/config中创建一个与应用程序/库中给出的名称相同的新文件,并在其中声明您的全局变量。现在要使用这些变量,自动加载新创建的库。

  2. 在application/core中创建自己的文件并在其中声明全局变量。在控制器中,您需要扩展文件名而不是CI_Controller。

  3. 如果全局变量是真的常量,只需将它们添加到application/config/constants.php文件中,并将它们命名为全部大写,如同其他定义的那样。

  4. 如果你想设置应用常量创建新的配置文件并添加变量。现在加载它为$ this-> config-> load('filename');并访问这些变量为

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

而不是创建助手创建库

第1步:所有的,开放的应用/库的第一,创建一个自定义 类名globals.php。它包含一个构造函数 包含一个数组作为参数。

<?php 

class Globals { 

// Pass array as an argument to constructor function 
public function __construct($config = array()) { 

// Create associative array from the passed array 
foreach ($config as $key => $value) { 
$data[$key] = $value; 
} 

// Make instance of CodeIgniter to use its resources 
$CI = & get_instance(); 

// Load data into CodeIgniter 
$CI->load->vars($data); 
} 

} 

?> 

第2步:现在使配置文件,打开应用程序/ config并创建 文件globals.php写如下的代码。此文件包含 这将作为一个数组 Globals类的构造,其中它的键和值被存储在被传递的配置变量$数据

<?php 

// Create customized config variables 
$config['web_Address']= 'https://www.example.com/blog'; 
$config['title']= 'CodeIgniter Global Variable'; 

?> 

当构造函数的负载,这将需要的配置变量 从配置文件为了在任何地方使用这些变量。

注意:上述文件的名称必须与在 库文件夹中创建的类相同,否则代码将不起作用。

第3步:但在使用这些变量之前,我们必须自动加载新建的 创建的库全局变量,如下所示。

而且在自动加载负荷库现在

$autoload['libraries'] = array('globals'); 

,您可以使用全局变量在控制器

<?php 
class CI_Global_Variable_Tutorial extends CI_Controller{ 
public function __construct() { 
parent::__construct(); 
} 
// Load view page 
public function index() { 
$this->load->view('show_global_variables'); 
} 
} 
?> 

浏览:show_global_variables.php

在视图页面,我们可以根据我们的需要使用全局变量。

<?php 
echo "Title of the blog post : ".$title; 
echo "<a href='$web_Address'>"."Click here to go to blog page"."</a>"; 
?> 
+0

load-> vars($ globalv)用于存储全局变量?它是否像会话,但不存储在服务器端?我可以重写$ globalv的值,就像我们在键/值对基础上做的会话一样吗? – MTA

+0

按照我上面解释过的所有步骤进行操作@MTA –

+0

对不起,您可以提出很多问题,我是新手,渴望学习。我怎样才能从控制器或模型中的代码一次又一次地覆盖这些变量,或者这些变量是不变的? – MTA