2009-07-29 14 views
0

コントローラからビューに値を渡す最も良い方法は誰に教えてください。誰かがcodeignitorで遊んでいれば、彼らは私が何を意味するかを知るでしょう。私はCIのコードを見ているが、これを処理するファイルを見つけることができません。私はこれがどのように行われたか知りたいと思っています。PHP MVC質問

ありがとうございます!

+2

これはあなたのフレームワークに非常に特有のものです(私自身はあなた自身を動かしていると思います)。もう少し詳しく説明してください。 – deceze

答えて

5

私が知る限りでは必ずしも「最良の」方法ではありませんが、私が何度も使用してきた共通の方法があり、自分自身を使用しています。これは、一般に連想配列を含み、extract()関数またはvariable variablesのいずれかです。

基本的に、テンプレート変数になるキーを使用して、データを結合配列に設定するだけです。

//inside the controller 
$data['name'] = 'my name'; 
$data['zip'] = '90210'; 

$dataアレイは、直接または間接的に、何らかの形でビューに渡され、extract()または可変変数(同じもの、本当に)のループを使用してを介して抽出されます。テンプレートを含めることができ、変数はローカルスコープにあります。

//inside the view rendering process 
extract($data); 
//$name and $zip now exist 

コードイグナイタは、この正確な手順に従います。最新のバージョン(1.7.1)のsystem\libraries\Loader.phpの内部には、view()という機能があります。これは、CIコントローラでビュー/テンプレートをロードするために呼び出す機能です(実際にCIに同じもの)。 2番目のパラメータとしてデータ配列を渡します。

view()は、同じファイル内の_ci_load()という内部関数を呼び出します。この関数は、渡されたデータを抽出します(他の不自然なキャッシングも行います)。あなたの変数はローカル関数スコープでそれ以降に行く準備ができており、その後にinclude()の後にテンプレート内で操作することができます。これは、インクルードされたファイル内で起こっているすべてが関数スコープのローカル_ci_load()にも存在するからです。

私は以前に設定された素早く汚れた家庭用MVCでまったく同じデザインを使用しました。それは非常に効果的です。

0

、それがます$ this-と

class IndexController { 
public function IndexAction { 
    $this->view->name='Name'; 
} 
} 

と同じくらい簡単です>表示 - >ビューで変数を設定XXXX。