2016-07-20 2 views
1

Я создаю сайт, на котором мне нужно сохранить глобальную переменную.Codeigniter: Использование статической переменной

Я использую этот человек кодовая globals_helper.php custom global variable class

Но я всегда получаю статической переменной нулевое значение.

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. Создайте свой собственный файл в приложении/ядре и объявите глобальные переменные в нем. Затем в контроллере вам нужно расширить имя файла вместо 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: Теперь, чтобы сделать конфигурационный файл, откройте приложение/конфигурационный файл и создать файл как globals.php и писать код, указанный ниже.Этот файл содержит переменные конфигурации, которая будет передаваться в виде массива конструктор класса Globals, где его ключи и значения сохраняются в $ данных

<?php 

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

?> 

Когда функция конструктора нагрузки, он будет брать config variables из файла конфигурации, чтобы использовать эти переменные где угодно.

Примечание: Имя вышеуказанного файла должно быть таким же, как класс, созданный в папке с библиотекой , иначе код не будет работать.

Шаг 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

Смежные вопросы