web-dev-qa-db-ja.com

ZendFrameworkのコントローラーでビューヘルパーを使用する

AJAX(JSONデータを送信する)で呼び出されるコントローラーがあるので、ビューを使用しません。

データをフォーマットするには、個人的なビューヘルパーを使用する必要がありますが、コントローラー内です。

それは可能ですか?

または多分私は 間違っている (多分私はビューを持っているべきですが、JSONではどうですか)?

19
Matthieu Napoli

コントローラから任意のViewHelperにアクセスできます。

$this->view->helpername(/*params*/);
// or
$helper = $this->view->getHelper('helpername');
// or
$broker = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$broker->getView()->helpername(/*params*/);

Zend:コントローラーのビューヘルパーからカスタム関数を使用する方法を参照してください

しかし、あなたはそれを間違っているのは正しいかもしれませんが(funny pic btw)、私はあなたの質問から本当にわかりません。ビューヘルパーを呼び出す必要がある理由と、それが何をフォーマットすることになっているのかについて、それを洗練してください。

43
Gordon
Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');

返されるビューが目的のビューであることを確認してください。将来的には、ビューが上書きされる可能性があり、コントローラー上に新しいビューが表示される可能性があります。

そして、コントローラーが起動される前に、アクションヘルパーなどのビューで設定したすべての値は?すべて風と共に去りました!

したがって、ビューリソースを取得した場合に想定する前に、テストしてください。それは本当にあなたが期待するのと同じビューリソースであり、あなたのすべての変数がまだそこにあるということです。

私がそうであったようにあなたは驚くかもしれません!

4
kindaian

ヘルパーのインスタンスを作成できます。これは、コントローラー、モデル、およびヘルパーが必要なすべての場所で機能します。

例えば。

// create Instance   
$serverUrl_helper = new Zend_View_Helper_ServerUrl();

// get the ServerUrl
$serverUrl = $serverUrl_helper->serverUrl();
3
Danilo

別のアプローチは、 ContextSwitchまたはAjaxContext action-helpers を使用することです。これにより、ビュースクリプトを使用して、そこから標準的な方法でビューヘルパーを呼び出すことができます。

1
David Weinraub

アクションヘルパーを使用するだけで、ビューヘルパーの多くはアクションヘルパーとしても利用できます。

または、Zend_Dateまたはsprintfを使用して直接。

0
takeshin