コントローラからビューに値を渡す最も良い方法は誰に教えてください。誰かがcodeignitorで遊んでいれば、彼らは私が何を意味するかを知るでしょう。私はCIのコードを見ているが、これを処理するファイルを見つけることができません。私はこれがどのように行われたか知りたいと思っています。PHP MVC質問
ありがとうございます!
コントローラからビューに値を渡す最も良い方法は誰に教えてください。誰かがcodeignitorで遊んでいれば、彼らは私が何を意味するかを知るでしょう。私はCIのコードを見ているが、これを処理するファイルを見つけることができません。私はこれがどのように行われたか知りたいと思っています。PHP MVC質問
ありがとうございます!
私が知る限りでは必ずしも「最良の」方法ではありませんが、私が何度も使用してきた共通の方法があり、自分自身を使用しています。これは、一般に連想配列を含み、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でまったく同じデザインを使用しました。それは非常に効果的です。
CakePHPの15-min blog sampleを試してみるとよいでしょう。私はコードイグナイターを試していません。 Zend Frameworkで
、それがます$ this-と
class IndexController {
public function IndexAction {
$this->view->name='Name';
}
}
と同じくらい簡単です>表示 - >ビューで変数を設定XXXX。
これはあなたのフレームワークに非常に特有のものです(私自身はあなた自身を動かしていると思います)。もう少し詳しく説明してください。 – deceze