2016-07-20 13 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にapplication/librariesで指定したのと同じ名前の新しいファイルを作成し、そこにグローバル変数を宣言します。これらの変数を使用するには、新しく作成したライブラリを自動ロードします。

  2. アプリケーション/コアで独自のファイルを作成し、グローバル変数を宣言します。コントローラよりも、CI_Controllerの代わりにファイル名を拡張する必要があります。

  3. グローバル変数がtrueの定数の場合は、application/config/constants.phpファイルに追加して、他のものと同じようにすべて大文字で指定します。

  4. アプリケーション定数を設定する場合は、新しい設定ファイルを作成し、変数を追加します。これを$ this-> config-> load( 'filename')として読み込みます。これらの変数には、

    $ this-> config-> item( 'variable_name');というようにアクセスします。まず、開いているアプリケーション/ライブラリとカスタム クラス名globals.phpを作成します。代わりにヘルパーを作成する

は、ライブラリ

ステップ1を作成します。これは、 に配列を引数として含むコンストラクタ関数を含んでいます。

<?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として ファイルを作成し、下記のコードを記述します。このファイルには、そのキーと値を$データ

<?php 

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

?> 

コンストラクタ関数をロードで保存されている グローバルクラスのコンストラクタに配列として渡されます 設定変数が含まれ、それがかかりますconfigファイルの の変数を使用して、これらの変数をどこでも使用できます。

注:上記のファイルの名前は、 librariesフォルダに作成されたクラスと同じでなければなりません。それ以外の場合、コードは機能しません。

ステップ3:これらの変数を使用する前に、新たに作成したライブラリのグローバルを以下のように自動ロードする必要があります。

とロードライブラリ

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

今のautoloadで、あなたのコントローラで

<?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

関連する問題