2011-12-11 18 views
0

Zend Frameworkのコントローラからビュースクリプトに変数を渡しています。とにかく、ビュースクリプト内で変数がどのように取得されるかを変更できるように、ビューを事前にフィルタリングできることを知りたい。Zend Frameworkビュースクリプトで変数を取得する方法を変更する

たとえば、コントローラでは私が持っている:

$this->view->name = 'Bob'; 

そして、私が持っているビューで:罰金は疑問を働かない

echo $this->name; 

! $この文を削除し、したがって、基本的

echo $name; 

:私が欲しいのはoccationallyので、私はちょうど使用することができ、それを変更する機能を持つことです。これは可能ですか?私はテンプレートを作っていて、テンプレートシステムを使っている他のデザイナーを持っていて、$ this-> array->という名前をいつも入力しやすくしたいと思っています。

私は単純に追加することができ、ビュースクリプト内で知っている:

$name = $this->name; 

しかし、私はどこかのコントローラでそれを行うしたいと思います。

ありがとうございました!

+0

名前でメッセージに署名する場合は、ユーザー名を変更し、実際の投稿には行を含めないでください。 :) – mac

答えて

2

私はこれがあなたのビューの出力変数の範囲で猿の周りに良い考えではないと思います。これは、フレームワークのMVCパターンに対して、グローバルスコープ全体のビューの内部を公開することによって機能します。あなたが本当にこれを行う上で主張すればしかし、コントローラでは、あなたはおそらく、このように世界的にそれらを割り当てることができます。

$GLOBALS['name'] = $this->view->name; 

そして$nameまたは$GLOBALS['name']として、後でそれらにアクセスします。

注:ビューの変数が入力されるタイミングとコントローラに割り当てられるタイミングに応じて、参照を割り当てる必要があります。

$GLOBALS['name'] = &$this->view->name; 
+0

恐ろしい!技術的に言えば、あなたが書くものは理にかなっているかもしれません。それは実際にはうまくいくような気がします。しかし、その時点で、私は自分自身に尋ねるでしょう...なぜMVCフレームワークを使用しているのか、私はそれを完全に嫌っています...そして、スパゲッティコードではないものをいくつか作り出していますか? ;-) – maraspin

+0

@ maraspin私は、これらの "十分なロープ"の答えを自分自身を吊るすと答えています...うまくいけば、OPへの私の免責は十分にはっきりしていました。 –

+0

あなたのポイントを得ました。 ;-)私のコメントは、実際には何よりも "奇妙な"プラクティスに対して初心者を怖がっていました。 – maraspin

1

あなたのアイデアは妥当であり、達成するのは非常に簡単です。ちょうどあなたのテンプレートの先頭に次の行を追加します。エキスは、ローカル作成して、グローバル変数を用いて表示する状態を渡す

<?php extract(get_object_vars($this)) ?> 

は、いくつかのことで良いアイデアで考慮されないかもしれないが、この方法は安全ですグローバルなものではなく、変数です。あなたは、このメソッドを再利用したいと&ペーストをコピーしたくない場合は

、あなたは簡単に(私が正しくリコール場合)メソッドに次の行を紹介し、Zend_Viewのから_runを継承して、あなたのブートストラップでの可能性:

  • はViewRenderer
にビュー・インスタンスを注入
  • は(Zend_Controller_Action_HelperBrokerの静的メソッドを使用して)ViewRendererアクションヘルパーを取得し、コントローラのインスタンスを作成します0

    このようにして、すべてのビューでパブリックプロパティが変数として表示されます。

  • 関連する問題