Zend Framework-他のコントローラーで宣言されたスクリプト変数をビューで使用する方法は?コントローラで再度表示するには、変数を渡す必要がありますか?
3 に答える
簡単な答えはイエスです!、データをビューに再割り当てする必要があります。
ただし、オプションがあります。
このデータが多くのビュースクリプトで使用される場合は、ユースケースに応じてビューヘルパーまたはアクションヘルパーを作成することが適切な場合があります。
シンプルなビューヘルパー:
class Zend_View_Helper_Length extends Zend_View_Helper_Abstract
{
public function length($minutes)
{
$hours = floor($minutes / 60);
$minutes = $minutes % 60;
if ($hours > 0) {
$time = sprintf("%01d Hours %02d Minutes", $hours, $minutes);
} else {
$time = sprintf("%02d Minutes", $minutes);
}
return $time;
}
}
簡単なアクションヘルパー:
class My_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{
public function direct()
{
$form = new Application_Form_Login();
$form->setAction('/index/login');
return $form;
}
}
データを複数のアクションで使用する場合は、単一のコントローラーでinit()メソッドにデータを設定できます。
public function init()
{
//initialize the flash messenger action helper to work in all actions
if ($this->_helper->FlashMessenger->hasMessages()) {
$this->view->messages = $this->_helper->FlashMessenger->getMessages();
}
}
データを短期間保存する必要がある場合は、レジストリに保存するか、セッションを長期間保存できます(このソリューションは特に便利です)。
これらは、さまざまなデータをアプリケーションで利用できるようにするためのより一般的な方法のほんの一部です。より方向性のある質問は、より方向性のある回答を受け取る可能性があります。
例:コントローラーが2つある場合:
コントローラーA:いくつかの変数があり、変数はビューAに渡されますコントローラーB:いくつかの変数があり、変数はビューBに渡されます
ビューBは、コントローラーAの変数にアクセスできません。
したがって、ビューBでコントローラーAの変数を使用する場合は、コントローラーBで再宣言する必要があります。
複数のビューインスタンスに追加したい「コア」ビュー変数がある場合は、抽象化レイヤーを追加して、そこでコアビュー変数を宣言することができます。例えば:
class myController extends Zend_Controller_Action
になる可能性があります
class myController extends myCoreController
と
class mySecondController extends myCoreController
と
class myCoreController extends Zend_Controller_Action
このようにして、コア変数をコントローラー間で使用可能にし、それらをすべて1か所で維持できます。