2016-08-30 6 views
0

私はCodi​​gnatorを使用しています。私の心の1つの質問は、これが内部的にどのように働いているのか、私にとって驚かすことですCodeignatorで動作するアロケーション・アレイ

私はTestControllerのようなコントローラを持っていると私はTestViewにという名前の私の見解に配列を渡すとassocativeています。協調的な配列は似ています。

$options = array(
      'small' => 'Samsung', 
      'med' => 'Apple', 
      'large' => 'HTC', 
      'xlarge' => 'Nokia'); 

私は上記の配列でビューをロードしています。

$this->load->view('TestView', $options); 

ビュー内これらのアソシエートアレイインデックスには、vairablesとしてアクセスできます。 Like

echo $small; 
echo $med; 
echo $large; 
echo $xlarge; 

これはどのように機能しているのですか?

+0

ちょうどノートで見ることができ 'クラスTestcontrollerはCI {}'最初の文字を拡張します大文字のみ – user4419336

+0

[CodeIgniterがデータをビューに渡す]重複している可能性があります(http://stackoverflow.com/questions/14270330/codeigniter-passing-data-to-the-view) –

答えて

0

reference link

データはビューローディング関数の2番目のパラメータの配列またはオブジェクトを介してコントローラからビューに渡されます。ここでアレイを用いた例がある:

<?php 

class Blog extends CI_Controller { 

    function index() { 

    $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands'); 

    $data['title'] = "My Real Title"; 
    $data['heading'] = "My Real Heading"; 

    $this->load->view('blogview', $data); 
    } 
} 

例えば上記$データ連想配列の各キーは、PHP extract関数そのCodeIgniterの流れによって行われてきたビューページ.ITにおける変数に変換されます。

ビューページ:内部からの変数を抽出するために、次のコードを使用してシステム/コア/ Loader.php内のすべての「ローダーのメソッド」であなたが_ci_loadを呼び出すためappens

<?php 

    print_r($todo_list); 
    echo $title; 
    echo $heading; 
?> 
0

、配列およびそれらをキャッシュ:

/* 
    * Extract and cache variables 
    * 
    * You can either set variables using the dedicated $this->load->vars() 
    * function or via the second parameter of this function. We'll merge 
    * the two types and cache them so that views that are embedded within 
    * other views can have access to these variables. 
    */ 
    if (is_array($_ci_vars)) 
    { 
     foreach (array_keys($_ci_vars) as $key) 
     { 
      if (strncmp($key, '_ci_', 4) === 0) 
      { 
       unset($_ci_vars[$key]); 
      } 
     } 
     $this->_ci_cached_vars = array_merge($this->_ci_cached_vars, $_ci_vars); 
    } 
    extract($this->_ci_cached_vars); 

重要な点は、抽出物である($この - > _ ci_cached_vars);.これは、配列のすべての要素をプロセスの現在のスコープのシンボルテーブルにインポートする標準のPHP関数です。そのため、配列要素ごとに新しい変数が作成されます。

1

あなたがよくお分かりいただければ、CodeIgniterがこの機能をどのように実装したかをお尋ねします。

php関数extractを見て、CodeIgniterはそれを使用してビューのコンテキストで変数として配列インデックスを使用できるようにします。

あなたはCodeIgniterのLoaderクラス(システム/コア/ Loader.php)ラインIはTestcontroller.php等コントローラを名前であろう949

extract($this->_ci_cached_vars); 
+0

ありがとうございます。あなたは私に質問の正確な答えを提供しました。もう一度Thnaks –

関連する問題