Zend Framework - 如何在其他控制器中声明的视图脚本变量中使用?

时间:2012-09-06 14:11:30

标签: zend-framework variables view controller

Zend Framework - 如何在其他控制器中声明的视图脚本变量中使用? 我是否需要再次传递变量才能在控制器中查看?

3 个答案:

答案 0 :(得分:1)

简短的回答是是的!,您必须将数据重新分配给视图。

但是有选择。

如果要在许多视图脚本中使用此数据,根据您的使用情况构建view helperaction helper可能是合适的。

一个简单的View帮助器:

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();
        }
    }

如果您只是需要在短时间内保存一段数据,可以将其保存到registry或更长时间,您可以使用session(我特别找到此解决方案)有用)。

这些只是使应用程序可以使用不同数据的一些常用方法。一个更直接的问题可能会得到更直接的答案。

答案 1 :(得分:0)

例如:如果您有2个控制器:

控制器A:它有一些变量,变量将传递给视图A. 控制器B:它有一些变量,变量将传递给视图B

视图B无法访问控制器A的变量。

因此,如果您想在视图B中使用控制器A的变量,则必须在控制器B中重新声明它

答案 2 :(得分:-1)

如果你想要添加到多个视图实例的某些“核心”视图变量,那么你可以想象有一个额外的抽象层并在那里声明你的核心视图变量。例如:

class myController extends Zend_Controller_Action

可能会成为

class myController extends myCoreController

class mySecondController extends myCoreController

class myCoreController extends Zend_Controller_Action

通过这种方式,您可以在控制器之间使用核心变量,并将它们全部保存在一个位置。